@vireo-ai/trellis-ui 0.1.43 → 0.1.47

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 (187) hide show
  1. package/package.json +2 -2
  2. package/packages/client/src/components/toast/styles.css +0 -1
  3. package/packages/client/src/styles/generated/theme-fonts.css +1 -1
  4. package/packages/client/src/styles/generated/theme-palette.css +99 -99
  5. package/packages/client/src/styles/generated/theme-runtime.css +229 -128
  6. package/packages/client/src/styles/generated-sources.css +1 -1
  7. package/packages/client/src/styles/motion.css +26 -0
  8. package/packages/client/src/styles/recipes/option.css +4 -2
  9. package/packages/client/src/styles/recipes/selection.css +4 -0
  10. package/packages/client/src/styles/static.css +1 -0
  11. package/packages/client/src/styles/theme.css +0 -4
  12. package/packages/client/types/capabilities/motion.d.ts +2 -1
  13. package/packages/client/types/components/app/contract.d.ts +8 -8
  14. package/packages/client/types/components/box/contract.d.ts +3 -3
  15. package/packages/client/types/components/card/contract.d.ts +4 -4
  16. package/packages/client/types/components/checkbox/contract.d.ts +5 -5
  17. package/packages/client/types/components/checkbox/machine.d.ts +1 -0
  18. package/packages/client/types/components/container/contract.d.ts +2 -2
  19. package/packages/client/types/components/date-picker/contract.d.ts +2 -2
  20. package/packages/client/types/components/date-picker/machine.d.ts +4 -4
  21. package/packages/client/types/components/dropdown/machine.d.ts +4 -1
  22. package/packages/client/types/components/dropdown/safe-area.d.ts +19 -0
  23. package/packages/client/types/components/field/contract.d.ts +1 -1
  24. package/packages/client/types/components/file-upload/contract.d.ts +2 -2
  25. package/packages/client/types/components/file-upload/index.d.ts +2 -0
  26. package/packages/client/types/components/file-upload/machine.d.ts +3 -2
  27. package/packages/client/types/components/flex/contract.d.ts +3 -3
  28. package/packages/client/types/components/frame/contract.d.ts +3 -3
  29. package/packages/client/types/components/grid/contract.d.ts +4 -4
  30. package/packages/client/types/components/layout.d.ts +3 -3
  31. package/packages/client/types/components/menu/contract.d.ts +11 -4
  32. package/packages/client/types/components/modal/contract.d.ts +2 -2
  33. package/packages/client/types/components/radio/contract.d.ts +4 -4
  34. package/packages/client/types/components/section/contract.d.ts +2 -2
  35. package/packages/client/types/components/select/contract.d.ts +3 -3
  36. package/packages/client/types/components/select/machine.d.ts +6 -6
  37. package/packages/client/types/components/sidebar/contract.d.ts +3 -3
  38. package/packages/client/types/components/stack/contract.d.ts +3 -3
  39. package/packages/client/types/components/tooltip/contract.d.ts +4 -4
  40. package/packages/client/types/directives/bounds.d.ts +4 -0
  41. package/packages/client/types/directives/index.d.ts +1 -0
  42. package/packages/client/types/motion/bounds.d.ts +20 -0
  43. package/packages/client/types/motion/flip.d.ts +14 -0
  44. package/packages/client/types/motion/index.d.ts +60 -4
  45. package/packages/client/types/motion/plan.d.ts +7 -1
  46. package/packages/client/types/motion/recipe.d.ts +64 -7
  47. package/packages/client/types/motion/resize.d.ts +3 -1
  48. package/packages/client/types/motion/size.d.ts +25 -0
  49. package/packages/client/types/runtime/collection-navigation.d.ts +2 -1
  50. package/packages/client/types/runtime/identity.d.ts +2 -1
  51. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +293 -179
  52. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +1 -1
  53. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +365 -328
  54. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +1 -1
  55. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js.map +1 -1
  56. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut.js +1 -1
  57. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +1 -1
  58. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-DCacA4wj.js +2 -0
  59. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-DCacA4wj.js.map +1 -0
  60. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-Z-__iteD.js +2 -0
  61. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-Z-__iteD.js.map +1 -0
  62. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-BnB9Wz0E.js +3 -0
  63. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-BnB9Wz0E.js.map +1 -0
  64. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-CfTZUJrL.js +2 -0
  65. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-CfTZUJrL.js.map +1 -0
  66. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-Dfj6NCjU.js +2 -0
  67. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{common-fH2NGblC.js.map → common-Dfj6NCjU.js.map} +1 -1
  68. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-DsXbNzqk.js → controller-BOf7dxV2.js} +2 -2
  69. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-DsXbNzqk.js.map → controller-BOf7dxV2.js.map} +1 -1
  70. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-Bmzg6DLB.js → core-DBX5qDXb.js} +2 -2
  71. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-Bmzg6DLB.js.map → core-DBX5qDXb.js.map} +1 -1
  72. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dom-invalidation-Dw6clnS4.js +2 -0
  73. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dom-invalidation-Dw6clnS4.js.map +1 -0
  74. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B8aXTJK6.js +2 -0
  75. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B8aXTJK6.js.map +1 -0
  76. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BEjAV5NT.js +2 -0
  77. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BEjAV5NT.js.map +1 -0
  78. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Ck7bhyzz.js → entry.generated-BUbxiHwA.js} +2 -2
  79. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Ck7bhyzz.js.map → entry.generated-BUbxiHwA.js.map} +1 -1
  80. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BV49EHah.js +2 -0
  81. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BV49EHah.js.map +1 -0
  82. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CEGLKsEl.js → entry.generated-B_e0djHK.js} +2 -2
  83. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CEGLKsEl.js.map → entry.generated-B_e0djHK.js.map} +1 -1
  84. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BdiyPh0p.js +2 -0
  85. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BdiyPh0p.js.map +1 -0
  86. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-By9j8PrV.js +2 -0
  87. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-By9j8PrV.js.map +1 -0
  88. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C0S3uZrm.js +2 -0
  89. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C0S3uZrm.js.map +1 -0
  90. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C5kjUnFe.js +2 -0
  91. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C5kjUnFe.js.map +1 -0
  92. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CSgqcIg6.js +2 -0
  93. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CSgqcIg6.js.map +1 -0
  94. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Gl6wz0Oh.js → entry.generated-Cekl4pYo.js} +2 -2
  95. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Gl6wz0Oh.js.map → entry.generated-Cekl4pYo.js.map} +1 -1
  96. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-e3bTOzUi.js → entry.generated-Cj1CmH13.js} +2 -2
  97. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cj1CmH13.js.map +1 -0
  98. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DcXzHGIV.js +2 -0
  99. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DcXzHGIV.js.map +1 -0
  100. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DeXEkXMW.js +2 -0
  101. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DeXEkXMW.js.map +1 -0
  102. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Dqyot6vM.js +2 -0
  103. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BbQ_TNRI.js.map → entry.generated-Dqyot6vM.js.map} +1 -1
  104. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CYHiRVjx.js → entry.generated-EAAmcnsg.js} +2 -2
  105. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CYHiRVjx.js.map → entry.generated-EAAmcnsg.js.map} +1 -1
  106. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-F2czAXCg.js +2 -0
  107. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-F2czAXCg.js.map +1 -0
  108. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BwAge51I.js → entry.generated-f6HGqvQY.js} +2 -2
  109. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BwAge51I.js.map → entry.generated-f6HGqvQY.js.map} +1 -1
  110. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-QspMEPHx.js → entry2.generated-QspMEPHx.js} +1 -1
  111. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-QspMEPHx.js.map +1 -0
  112. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-a2NebZsn.js +2 -0
  113. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-a2NebZsn.js.map +1 -0
  114. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-DT-Hq9qe.js +3 -0
  115. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-DT-Hq9qe.js.map +1 -0
  116. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/styles-CpTCQjY5.js +2 -0
  117. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/styles-CpTCQjY5.js.map +1 -0
  118. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CfByjNaO.js +4 -0
  119. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CfByjNaO.js.map +1 -0
  120. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +1 -1
  121. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox.js +1 -1
  122. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +1 -1
  123. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +1 -1
  124. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +1 -1
  125. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field.js +1 -1
  126. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload.js +1 -1
  127. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +1 -1
  128. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js.map +1 -1
  129. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input.js +1 -1
  130. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding.js +1 -1
  131. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +1 -1
  132. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +1 -1
  133. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio.js +1 -1
  134. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +1 -1
  135. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +1 -1
  136. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider.js +1 -1
  137. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch.js +1 -1
  138. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table.js +1 -1
  139. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +1 -1
  140. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +1 -1
  141. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +1 -1
  142. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +1 -1
  143. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +1 -1
  144. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js.map +1 -1
  145. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +169 -145
  146. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +9 -9
  147. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +9 -9
  148. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-C_8mc71v.js +0 -2
  149. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-C_8mc71v.js.map +0 -1
  150. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-Br_XBf7u.js +0 -2
  151. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-Br_XBf7u.js.map +0 -1
  152. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-aY5GWxrK.js +0 -3
  153. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-aY5GWxrK.js.map +0 -1
  154. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-CtNDGKcQ.js +0 -2
  155. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-CtNDGKcQ.js.map +0 -1
  156. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-fH2NGblC.js +0 -2
  157. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B74OtpL2.js +0 -2
  158. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B74OtpL2.js.map +0 -1
  159. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BZXp8Edl.js +0 -2
  160. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BZXp8Edl.js.map +0 -1
  161. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BbQ_TNRI.js +0 -2
  162. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C1JdfrdC.js +0 -2
  163. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C1JdfrdC.js.map +0 -1
  164. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CtoSPDoI.js +0 -2
  165. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CtoSPDoI.js.map +0 -1
  166. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D0Av2Aiw.js +0 -2
  167. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D0Av2Aiw.js.map +0 -1
  168. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DJMDdEtO.js +0 -2
  169. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DJMDdEtO.js.map +0 -1
  170. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DNtvOM3X.js +0 -2
  171. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DNtvOM3X.js.map +0 -1
  172. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DSyiRko7.js +0 -2
  173. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DSyiRko7.js.map +0 -1
  174. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Dd04OzRH.js +0 -2
  175. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Dd04OzRH.js.map +0 -1
  176. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-QspMEPHx.js.map +0 -1
  177. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-jP0UEZIS.js +0 -2
  178. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-jP0UEZIS.js.map +0 -1
  179. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-vM-5KVaL.js +0 -2
  180. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-vM-5KVaL.js.map +0 -1
  181. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-xjDWyE7q.js +0 -2
  182. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-xjDWyE7q.js.map +0 -1
  183. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-e3bTOzUi.js.map +0 -1
  184. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-BhADgUVd.js +0 -3
  185. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-BhADgUVd.js.map +0 -1
  186. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-egQWc4ws.js +0 -4
  187. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-egQWc4ws.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.generated-BEjAV5NT.js","names":[],"sources":["../../../../../../../../client/src/components/modal/contract.ts","../../../../../../../../client/src/components/modal/machine.ts","../../../../../../../../client/src/components/modal/styles.ts","../../../../../../../../client/src/components/modal/index.ts","../../../../../../../../client/src/components/modal/entry.generated.ts"],"sourcesContent":["import {bool, oneOf, string, type PropState, type SchemaToProps} from '../../runtime';\nimport {\n EDGE_POSITIONS,\n ELEVATION_REFERENCES,\n HEADING_LEVELS,\n SURFACE_REFERENCES,\n type EdgePosition,\n type ElevationReference,\n type HeadingLevel,\n type SurfaceReference,\n} from '../common';\n\nconst MODAL_MODES = ['modal', 'sheet'] as const;\nconst MODAL_SIDES = EDGE_POSITIONS;\nconst MODAL_SIZES = ['sm', 'md', 'lg', 'xl', 'full'] as const;\nconst MODAL_SURFACES = SURFACE_REFERENCES;\nconst MODAL_ELEVATIONS = ELEVATION_REFERENCES;\nconst MODAL_TITLE_AS_VALUES = HEADING_LEVELS;\n\ntype ModalMode = typeof MODAL_MODES[number];\ntype ModalSide = EdgePosition;\ntype ModalSize = typeof MODAL_SIZES[number];\ntype ModalSurface = SurfaceReference;\ntype ModalElevation = ElevationReference;\ntype ModalTitleAs = HeadingLevel;\n\nconst modalSchema = {\n name: string,\n open: bool,\n mode: oneOf(MODAL_MODES, 'modal'),\n side: oneOf(MODAL_SIDES, 'right'),\n size: oneOf(MODAL_SIZES, 'md'),\n surface: oneOf(MODAL_SURFACES, '1' as ModalSurface),\n elevation: oneOf(MODAL_ELEVATIONS, '5' as ModalElevation),\n dismissible: bool.default(true),\n closable: bool.default(true),\n disabled: bool,\n autofocusTitle: bool,\n label: string,\n descriptionId: string,\n panelClass: string,\n overlayClass: string,\n class: string,\n};\n\nconst modalTriggerSchema = {\n name: string,\n disabled: bool,\n class: string,\n};\n\nconst modalOutletSchema = {\n id: string.default('ui-modal-root'),\n class: string,\n};\n\nconst modalTitleSchema = {\n as: oneOf(MODAL_TITLE_AS_VALUES, 'h2'),\n class: string,\n};\n\nconst modalDescriptionSchema = {\n class: string,\n};\n\nconst modalBodySchema = {\n class: string,\n};\n\nconst modalFooterSchema = {\n class: string,\n};\n\nconst modalCloseSchema = {\n label: string.default('Close'),\n class: string,\n};\n\ntype ModalProps = SchemaToProps<typeof modalSchema>;\ntype ModalTriggerProps = PropState<typeof modalTriggerSchema>;\n\nexport {\n MODAL_SIDES,\n MODAL_SIZES,\n MODAL_ELEVATIONS,\n MODAL_SURFACES,\n MODAL_TITLE_AS_VALUES,\n MODAL_MODES,\n modalBodySchema,\n modalCloseSchema,\n modalDescriptionSchema,\n modalFooterSchema,\n modalOutletSchema,\n modalSchema,\n modalTitleSchema,\n modalTriggerSchema,\n};\nexport type {\n ModalSide,\n ModalProps,\n ModalSize,\n ModalSurface,\n ModalElevation,\n ModalTitleAs,\n ModalTriggerProps,\n ModalMode,\n};\n","import {\n createMachine,\n type Machine,\n} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport {defineControlledOpenProps} from '../shared/controlled-open';\nimport type {ModalProps} from './contract';\n\ntype ModalContext = Record<string, never>;\n\ntype ModalMachineEffects = {\n prepareOpen(): void;\n finishOpen(): void;\n prepareClose(): void;\n finishClose(): void;\n syncProps(): void;\n emitCancel(reason: 'escape' | 'outside'): void;\n};\n\ntype CreateModalMachineOptions = {\n props: ModalProps;\n effects: ModalMachineEffects;\n};\n\nconst openingHook = defineHook({\n name: 'opening',\n state: 'opening',\n project: () => ({}),\n onDone: 'OPENING_DONE',\n onError: 'OPENING_ERROR',\n} satisfies TransitionHookDefinition<ModalContext, ModalProps, Record<string, never>, 'opening'>);\n\nconst closingHook = defineHook({\n name: 'closing',\n state: 'closing',\n project: () => ({}),\n onDone: 'CLOSING_DONE',\n onError: 'CLOSING_ERROR',\n} satisfies TransitionHookDefinition<ModalContext, ModalProps, Record<string, never>, 'closing'>);\n\nconst modalHooks = [openingHook, closingHook] as const;\nconst controlledOpenProps = defineControlledOpenProps<ModalContext, ModalProps>();\n\nconst createModalMachine = ({\n props,\n effects,\n}: CreateModalMachineOptions): Machine<ModalContext, ModalProps> => createMachine<ModalContext, ModalProps>({\n initial: 'closed',\n states: {\n closed: {\n tags: ['closed'],\n on: {\n OPEN: {target: 'opening', guard: 'canOpen', effects: 'prepareOpen'},\n PROPS_CHANGED: [\n {\n target: 'opening',\n guard: controlledOpenProps.shouldOpen,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareOpen'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n opening: {\n tags: ['visible', 'interactive', 'transitioning'],\n on: {\n OPENING_DONE: {target: 'open', effects: 'finishOpen'},\n OPENING_ERROR: {target: 'open', effects: 'finishOpen'},\n CLOSE: {target: 'closing', effects: 'prepareClose'},\n CANCEL: {target: 'closing', guard: 'canDismiss', effects: ['emitCancel', 'prepareClose']},\n PROPS_CHANGED: [\n {\n target: 'closing',\n guard: controlledOpenProps.shouldClose,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareClose'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n open: {\n tags: ['visible', 'interactive', 'open'],\n on: {\n CLOSE: {target: 'closing', effects: 'prepareClose'},\n CANCEL: {target: 'closing', guard: 'canDismiss', effects: ['emitCancel', 'prepareClose']},\n PROPS_CHANGED: [\n {\n target: 'closing',\n guard: controlledOpenProps.shouldClose,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareClose'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n closing: {\n tags: ['visible', 'transitioning'],\n on: {\n CLOSING_DONE: {target: 'closed', effects: 'finishClose'},\n CLOSING_ERROR: {target: 'closed', effects: 'finishClose'},\n OPEN: {target: 'opening', guard: 'canOpen', effects: 'prepareOpen'},\n PROPS_CHANGED: [\n {\n target: 'opening',\n guard: controlledOpenProps.shouldOpen,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareOpen'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n },\n}, {\n context: {},\n props,\n reducers: {\n replaceProps: controlledOpenProps.replace,\n },\n guards: {\n canOpen: ({props: currentProps}) => !currentProps.disabled,\n canDismiss: ({props: currentProps}) => currentProps.dismissible,\n },\n effects: {\n prepareOpen: effects.prepareOpen,\n finishOpen: effects.finishOpen,\n prepareClose: effects.prepareClose,\n finishClose: effects.finishClose,\n syncProps: effects.syncProps,\n emitCancel: ({event}) => {\n if (event.reason === 'escape' || event.reason === 'outside') effects.emitCancel(event.reason);\n },\n },\n});\n\nexport {createModalMachine, modalHooks};\nexport type {CreateModalMachineOptions, ModalContext, ModalMachineEffects};\n","import {defineStyles} from '../../runtime';\n\nconst EDGE_PANEL_LAYOUT_CLASSES = [\n 'grid-rows-[auto_auto_minmax(0,1fr)_auto]',\n '[&>[data-ui-modal-body]]:-mx-1 [&>[data-ui-modal-body]]:min-h-0 [&>[data-ui-modal-body]]:content-start',\n '[&>[data-ui-modal-body]]:overflow-x-hidden [&>[data-ui-modal-body]]:overflow-y-auto [&>[data-ui-modal-body]]:px-1',\n '[&>[data-ui-modal-footer]]:self-end',\n] as const;\n\nconst modalStyles = defineStyles({definition: {\n component: 'ui.modal',\n parts: {\n instance: {\n base: 'contents',\n },\n root: {\n base: [\n 'fixed inset-0 z-dialog m-0 h-auto max-h-none w-auto max-w-none overflow-visible border-0 bg-transparent p-0 text-surface-ink',\n 'backdrop:bg-transparent',\n ],\n },\n viewport: {\n base: 'fixed inset-0 z-dialog flex min-h-dvh',\n variants: {\n mode: {\n modal: 'items-center justify-center overflow-y-auto p-4',\n sheet: '',\n },\n side: {\n top: '',\n right: '',\n bottom: '',\n left: '',\n },\n },\n compounds: [\n {when: {mode: 'sheet', side: 'top'}, class: 'items-start justify-center'},\n {when: {mode: 'sheet', side: 'right'}, class: 'items-center justify-end overflow-hidden'},\n {when: {mode: 'sheet', side: 'bottom'}, class: 'items-end justify-center'},\n {when: {mode: 'sheet', side: 'left'}, class: 'items-center justify-start overflow-hidden'},\n ],\n defaults: {\n mode: 'modal',\n side: 'right',\n },\n },\n overlay: {\n base: 'fixed inset-0 bg-scrim',\n },\n panel: {\n base: [\n 'relative z-dialog grid w-full min-w-0 gap-4 overflow-auto p-5 outline-none',\n 'max-h-full',\n ],\n variants: {\n mode: {\n modal: 'rounded-overlay-md',\n sheet: '',\n },\n side: {\n top: '',\n right: '',\n bottom: '',\n left: '',\n },\n size: {\n sm: 'max-w-modal-sm',\n md: 'max-w-modal-md',\n lg: 'max-w-modal-lg',\n xl: 'max-w-modal-xl',\n full: 'max-w-full',\n },\n },\n compounds: [\n {when: {mode: 'sheet', side: 'right'}, class: ['min-h-dvh rounded-l-overlay-md', EDGE_PANEL_LAYOUT_CLASSES]},\n {when: {mode: 'sheet', side: 'left'}, class: ['min-h-dvh rounded-r-overlay-md', EDGE_PANEL_LAYOUT_CLASSES]},\n {when: {mode: 'sheet', side: 'top'}, class: 'max-w-full rounded-b-overlay-md'},\n {when: {mode: 'sheet', side: 'bottom'}, class: 'max-w-full rounded-t-overlay-md'},\n ],\n defaults: {\n mode: 'modal',\n side: 'right',\n size: 'md',\n },\n },\n trigger: {\n base: 'contents',\n },\n outlet: {\n base: '',\n },\n title: {\n base: 'pr-8',\n },\n description: {\n base: '-mt-3 pr-8 text-surface-ink-muted',\n },\n body: {\n base: 'grid min-w-0 gap-3 text-sm',\n },\n footer: {\n base: 'flex min-w-0 items-center justify-end gap-2 pt-1',\n },\n close: {\n base: [\n 'absolute right-3 top-3 inline-flex size-control-md items-center justify-center rounded-full border border-transparent text-surface-ink-muted outline-none',\n 'hover:bg-interaction-hover focus-visible:ui-focus-ring',\n ],\n },\n closeIcon: {\n base: 'size-icon fill-current',\n },\n },\n}});\n\nexport {modalStyles};\n","import type Alpine from 'alpinejs';\n\nimport {createBoundsMotion, type BoundsMotion} from '@client/motion';\nimport {\n type AlpineMachine,\n createAlpineMachine,\n defineAlpineData,\n reflectSchemaProp,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {defineProps} from '@client/runtime/codecs';\nimport {addDismissableLayer} from '@client/runtime/dismissable-layer';\nimport {FOCUSABLE_SELECTOR, closestFocusable, focusableElements, isFocusable, trapFocus as trapFocusWithin} from '@client/runtime/focus-scope';\nimport {mergeBindings, type BindingObject} from '@client/runtime/merge-bindings';\nimport {declareMorphAttributes} from '@client/runtime/morph';\nimport {lockDocumentScroll, unlockDocumentScroll} from '@client/runtime/scroll-lock';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {addListener, dispatch, type CleanupStack} from '@client/utils';\nimport {\n modalSchema,\n modalTriggerSchema,\n type ModalProps,\n type ModalTriggerProps,\n} from './contract';\nimport {createModalMachine, modalHooks, type ModalContext} from './machine';\nimport {modalStyles} from './styles';\n\ntype ModalTransitionName = (typeof modalHooks)[number]['name'];\ntype ModalTransition<TName extends ModalTransitionName = ModalTransitionName> = TransitionForHook<\n Extract<(typeof modalHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype CancelReason = 'escape' | 'outside';\n\ntype ModalCancelDetail = {\n reason: CancelReason;\n};\n\ntype ModalCloseEventDetail = {\n name?: string;\n};\n\ntype ModalController = {\n readonly name: string;\n readonly isOpen: boolean;\n readonly dialogId: string;\n openFrom(trigger: HTMLElement): void;\n close(event?: Event): void;\n syncExternalTrigger(trigger: HTMLElement, disabled: boolean): void;\n};\n\ntype ModalTriggerController = {\n readonly name: string;\n readonly target: HTMLElement;\n sync(): void;\n};\n\n/**\n * Public Alpine API for `ui.modal`.\n *\n * @public\n */\ninterface UiModalApi {\n /** Whether the modal has completed its opening transition. */\n readonly isOpen: boolean;\n\n /** Whether the modal is opening, open, or closing. */\n readonly isVisible: boolean;\n\n /** Opens the modal unless it is disabled. */\n open(event?: Event): void;\n\n /** Closes the modal. */\n close(event?: Event): void;\n}\n\n/**\n * Public Alpine API for `ui.modal.trigger`.\n *\n * @public\n */\ninterface UiModalTriggerApi {\n /** Opens the named modal unless the trigger or modal is disabled. */\n open(event?: Event): void;\n}\n\ntype ModalData = AlpineMachine<ModalContext, ModalProps, typeof modalHooks> & UiModalApi & {\n readonly name: string;\n readonly dialogId: string;\n readonly root: BindingObject;\n readonly dialog: BindingObject;\n readonly viewport: BindingObject;\n readonly overlay: BindingObject;\n readonly panel: BindingObject;\n init(): void;\n destroy(): void;\n};\n\ntype ModalTriggerData = UiModalTriggerApi & {\n readonly root: BindingObject;\n init(): void;\n destroy(): void;\n};\n\nconst modalControllers = new Set<ModalController>();\nconst modalTriggerControllers = new Set<ModalTriggerController>();\n\nconst stateFor = (open: boolean): 'open' | 'closed' => (open ? 'open' : 'closed');\nconst isExpandedState = (state: unknown): boolean => state === 'opening' || state === 'open';\n\nconst findNamedModal = (name: string): ModalController | null => (\n Array.from(modalControllers).find((controller) => controller.name === name) ?? null\n);\n\nconst setOpenAttributes = (el: HTMLElement, open: boolean): void => {\n el.setAttribute('data-state', stateFor(open));\n el.setAttribute('aria-expanded', open ? 'true' : 'false');\n};\n\nconst UiModal = (): TrellisAlpineComponent<ModalData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let dialogId = '';\n let activeTrigger: HTMLElement | null = null;\n let didShowModal = false;\n let hasScrollLock = false;\n let isRegistered = false;\n let cleanup: CleanupStack = [];\n let localTriggerCleanup: CleanupStack = [];\n let settledMode: ModalProps['mode'] | null = null;\n let boundsMotion: BoundsMotion | null = null;\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Modal has not been initialized.');\n return rootEl;\n };\n\n const dialogEl = (): HTMLDialogElement => {\n const dialog = root().querySelector<HTMLDialogElement>('[data-ui-modal]');\n if (!(dialog instanceof HTMLDialogElement)) throw new Error('Modal requires a dialog element.');\n return dialog;\n };\n\n const viewportEl = (): HTMLElement => {\n const viewport = root().querySelector<HTMLElement>('[data-ui-modal-viewport]');\n if (!viewport) throw new Error('Modal requires a viewport element.');\n return viewport;\n };\n\n const overlayEl = (): HTMLElement => {\n const overlay = root().querySelector<HTMLElement>('[data-ui-modal-overlay]');\n if (!overlay) throw new Error('Modal requires an overlay element.');\n return overlay;\n };\n\n const panelEl = (): HTMLElement => {\n const panel = root().querySelector<HTMLElement>('[data-ui-modal-panel]');\n if (!panel) throw new Error('Modal requires a panel element.');\n return panel;\n };\n\n const titleEl = (): HTMLElement | null => root().querySelector<HTMLElement>('[data-ui-modal-title]');\n const descriptionEl = (): HTMLElement | null => root().querySelector<HTMLElement>('[data-ui-modal-description]');\n\n const syncPresentation = (): void => {\n const props = currentProps();\n dialogEl().className = resolveStyle({part: modalStyles.parts.root, props, className: props.class});\n viewportEl().className = resolveStyle({part: modalStyles.parts.viewport, props});\n overlayEl().className = resolveStyle({\n part: modalStyles.parts.overlay,\n props,\n className: props.overlayClass,\n });\n panelEl().className = resolveStyle({\n part: modalStyles.parts.panel,\n props,\n className: props.panelClass,\n });\n };\n\n const syncPresentationWithBoundsMotion = (): void => {\n const props = currentProps();\n const shouldAnimate = (\n settledMode === props.mode\n && props.open\n && dialogEl().open\n && bridge.matches('open')\n );\n boundsMotion?.update(syncPresentation, {\n animate: shouldAnimate,\n key: `${props.mode}:${props.size}`,\n });\n settledMode = props.mode;\n };\n\n const localTriggerEl = (): HTMLElement | null => (\n Array.from(root().children)\n .find((child) => child instanceof HTMLElement && child.matches('[data-ui-modal-trigger]')) as HTMLElement | undefined\n ?? null\n );\n\n const focusableEls = (): HTMLElement[] => focusableElements(panelEl());\n\n const currentProps = (): Readonly<ModalProps> => bridge.getCommittedSnapshot().props;\n const isExpanded = (): boolean => bridge.matches('opening') || bridge.matches('open');\n\n const syncExternalTrigger = (trigger: HTMLElement, disabled: boolean): void => {\n const expanded = isExpanded();\n setOpenAttributes(trigger, expanded);\n trigger.setAttribute('aria-controls', dialogId);\n trigger.setAttribute('data-ui-modal-trigger-target', dialogId);\n\n if (disabled || currentProps().disabled) {\n trigger.setAttribute('aria-disabled', 'true');\n trigger.setAttribute('data-disabled', '');\n if (trigger instanceof HTMLButtonElement) trigger.disabled = true;\n if (!trigger.matches(FOCUSABLE_SELECTOR)) trigger.tabIndex = -1;\n return;\n }\n\n trigger.removeAttribute('aria-disabled');\n trigger.removeAttribute('data-disabled');\n if (trigger instanceof HTMLButtonElement) trigger.disabled = false;\n if (!trigger.matches(FOCUSABLE_SELECTOR)) trigger.tabIndex = 0;\n };\n\n const syncTriggers = (): void => {\n const local = localTriggerEl();\n if (local) syncExternalTrigger(closestFocusable(local), currentProps().disabled);\n modalTriggerControllers.forEach((trigger) => trigger.sync());\n };\n\n const syncAccessibility = (): void => {\n const props = currentProps();\n const dialog = dialogEl();\n const panel = panelEl();\n const title = titleEl();\n const description = descriptionEl();\n\n dialog.id = dialogId;\n dialog.setAttribute('role', 'dialog');\n dialog.setAttribute('aria-modal', 'true');\n panel.id ||= `${dialogId}-panel`;\n panel.tabIndex = -1;\n\n if (title) {\n title.id ||= `${dialogId}-title`;\n dialog.setAttribute('aria-labelledby', title.id);\n dialog.removeAttribute('aria-label');\n if (props.autofocusTitle) title.tabIndex = -1;\n else title.removeAttribute('tabindex');\n } else {\n dialog.removeAttribute('aria-labelledby');\n if (props.label) dialog.setAttribute('aria-label', props.label);\n else dialog.removeAttribute('aria-label');\n }\n\n if (description) description.id ||= `${dialogId}-description`;\n if (props.descriptionId === 'none') dialog.removeAttribute('aria-describedby');\n else if (props.descriptionId) dialog.setAttribute('aria-describedby', props.descriptionId);\n else if (description) dialog.setAttribute('aria-describedby', description.id);\n else dialog.removeAttribute('aria-describedby');\n };\n\n const syncStateAttributes = ({syncOpen = true}: {syncOpen?: boolean} = {}): void => {\n const expanded = isExpanded();\n const state = stateFor(expanded);\n if (syncOpen) {\n reflectSchemaProp({el: root(), schema: modalSchema, key: 'open', value: expanded});\n }\n [dialogEl(), viewportEl(), overlayEl(), panelEl()].forEach((element) => {\n element.setAttribute('data-state', state);\n });\n syncTriggers();\n };\n\n const focusInitial = (): void => {\n const autofocus = panelEl().querySelector<HTMLElement>('[autofocus]');\n if (autofocus && isFocusable(autofocus)) {\n autofocus.focus({preventScroll: true});\n return;\n }\n\n const title = titleEl();\n if (currentProps().autofocusTitle && title) {\n title.focus({preventScroll: true});\n return;\n }\n\n const firstFocusable = focusableEls()[0];\n if (firstFocusable) {\n firstFocusable.focus({preventScroll: true});\n return;\n }\n\n panelEl().focus({preventScroll: true});\n };\n\n const restoreFocus = (): void => {\n if (!activeTrigger || !document.contains(activeTrigger)) return;\n activeTrigger.focus({preventScroll: true});\n };\n\n const trapFocus = (event: KeyboardEvent): void => {\n if (!bridge.hasTag('interactive')) return;\n trapFocusWithin(event, panelEl());\n };\n\n const prepareOpen = (): void => {\n boundsMotion?.refresh({animate: false});\n const dialog = dialogEl();\n if (typeof dialog.showModal === 'function' && !didShowModal) {\n if (dialog.open) dialog.removeAttribute('open');\n dialog.showModal();\n didShowModal = true;\n } else if (!dialog.open) {\n dialog.setAttribute('open', '');\n }\n\n if (!hasScrollLock) {\n lockDocumentScroll();\n hasScrollLock = true;\n }\n syncAccessibility();\n syncStateAttributes();\n queueMicrotask(focusInitial);\n };\n\n const finishOpen = (): void => {\n boundsMotion?.refresh({animate: false});\n const panel = panelEl();\n panel.style.removeProperty('transform');\n panel.style.removeProperty('translate');\n panel.style.removeProperty('scale');\n panel.style.removeProperty('rotate');\n settledMode = currentProps().mode;\n syncStateAttributes();\n dispatch({el: dialogEl(), name: 'ui:open'});\n };\n\n const prepareClose = (): void => {\n boundsMotion?.refresh({animate: false});\n syncStateAttributes();\n };\n\n const finishClose = (): void => {\n boundsMotion?.refresh({animate: false});\n const dialog = dialogEl();\n if (dialog.open) dialog.close();\n didShowModal = false;\n if (hasScrollLock) {\n unlockDocumentScroll();\n hasScrollLock = false;\n }\n syncStateAttributes();\n settledMode = null;\n restoreFocus();\n dispatch({el: dialog, name: 'ui:close'});\n };\n\n const syncProps = (): void => {\n syncPresentationWithBoundsMotion();\n syncAccessibility();\n syncTriggers();\n };\n\n const bridge = createAlpineMachine({\n schema: modalSchema,\n hooks: modalHooks,\n createMachine: ({props}) => createModalMachine({\n props,\n effects: {\n prepareOpen,\n finishOpen,\n prepareClose,\n finishClose,\n syncProps,\n emitCancel: (reason) => {\n dispatch<ModalCancelDetail>({el: dialogEl(), name: 'ui:cancel', detail: {reason}});\n },\n },\n }),\n });\n\n const openFrom = (trigger: HTMLElement): void => {\n if (currentProps().disabled) return;\n activeTrigger = trigger;\n bridge.send('OPEN');\n };\n\n const cancel = (reason: CancelReason, event?: Event): void => {\n event?.preventDefault();\n bridge.send({type: 'CANCEL', reason});\n };\n\n const teardownLocalTrigger = (): void => {\n localTriggerCleanup.forEach((dispose) => dispose());\n localTriggerCleanup = [];\n };\n\n const setupLocalTrigger = (trigger: HTMLElement): void => {\n const target = closestFocusable(trigger);\n teardownLocalTrigger();\n syncExternalTrigger(target, currentProps().disabled);\n addListener({target, event: 'click', handler: () => openFrom(target), cleanup: localTriggerCleanup});\n addListener({target, event: 'keydown', handler: (event) => {\n if (!(event instanceof KeyboardEvent)) return;\n if (target instanceof HTMLButtonElement || target instanceof HTMLAnchorElement) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n openFrom(target);\n }, cleanup: localTriggerCleanup});\n };\n\n const mountLocalTrigger = (): void => {\n const dialog = dialogEl();\n const inlineTrigger = dialog.querySelector<HTMLElement>('[data-ui-modal-trigger]');\n if (!inlineTrigger || inlineTrigger.dataset.name) return;\n root().insertBefore(inlineTrigger, dialog);\n setupLocalTrigger(inlineTrigger);\n };\n\n const setupEvents = (): void => {\n const dialog = dialogEl();\n addListener({target: dialog, event: 'cancel', handler: (event) => {\n if (event.target !== dialog) return;\n cancel('escape', event);\n }, cleanup});\n addListener({target: dialog, event: 'close', handler: () => {\n if (bridge.hasTag('visible')) bridge.send('CLOSE');\n }, cleanup});\n addListener({target: dialog, event: 'keydown', handler: (event) => {\n if (event instanceof KeyboardEvent) trapFocus(event);\n }, cleanup});\n addListener({target: dialog, event: 'click', handler: (event) => {\n const target = event.target;\n if (!(target instanceof Element) || !target.closest('[data-ui-modal-close]')) return;\n event.preventDefault();\n bridge.send('CLOSE');\n }, cleanup});\n addListener({target: document, event: 'ui:modal-close', handler: (event) => {\n const detail = (event as CustomEvent<ModalCloseEventDetail>).detail;\n if (!detail?.name || detail.name !== currentProps().name) return;\n bridge.send('CLOSE');\n }, cleanup});\n cleanup.push(addDismissableLayer({\n isEnabled: () => bridge.hasTag('interactive'),\n roots: () => [panelEl(), activeTrigger, localTriggerEl()],\n onDismiss: (event) => cancel('outside', event),\n }));\n };\n\n let component!: TrellisAlpineComponent<ModalData>;\n const controller: ModalController = {\n get name() {\n return currentProps().name;\n },\n get isOpen() {\n return bridge.matches('open');\n },\n get dialogId() {\n return dialogId;\n },\n openFrom,\n close(event?: Event) {\n event?.preventDefault();\n bridge.send('CLOSE');\n },\n syncExternalTrigger,\n };\n\n component = {\n ...bridge,\n get name(): string {\n return this.snapshot.current?.props.name ?? '';\n },\n get isOpen(): boolean {\n return this.snapshot.current?.value === 'open';\n },\n get isVisible(): boolean {\n return this.snapshot.current?.tags.includes('visible') ?? false;\n },\n get dialogId(): string {\n return dialogId;\n },\n init(): void {\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n const props = currentProps();\n syncPresentation();\n boundsMotion = createBoundsMotion(panelEl(), {properties: ['height', 'maxWidth']});\n dialogId = dialogEl().id || this.$id(`modal${props.name ? `-${props.name}` : ''}`);\n declareMorphAttributes(dialogEl(), 'open');\n syncAccessibility();\n modalControllers.add(controller);\n isRegistered = true;\n mountLocalTrigger();\n setupEvents();\n syncStateAttributes({syncOpen: false});\n if (props.open) queueMicrotask(() => bridge.send('OPEN'));\n },\n destroy(): void {\n boundsMotion?.destroy();\n boundsMotion = null;\n cleanup.forEach((dispose) => dispose());\n cleanup = [];\n teardownLocalTrigger();\n if (isRegistered) {\n modalControllers.delete(controller);\n isRegistered = false;\n }\n bridge.disconnect();\n const dialog = rootEl?.querySelector<HTMLDialogElement>('[data-ui-modal]');\n if (dialog?.open) dialog.close();\n if (hasScrollLock) {\n unlockDocumentScroll();\n hasScrollLock = false;\n }\n modalTriggerControllers.forEach((trigger) => trigger.sync());\n rootEl = null;\n },\n get root(): BindingObject {\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.instance, props: {}, className: ''}),\n {'data-ui-modal-instance': ''},\n ]});\n },\n get dialog(): BindingObject {\n const snapshot = this.snapshot;\n const props = snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.root, props, className: props.class}),\n {\n id: dialogId,\n role: 'dialog',\n 'aria-modal': 'true',\n ':data-state': () => stateFor(isExpandedState(snapshot.current?.value)),\n ':data-mode': () => snapshot.current?.props.mode,\n ':data-side': () => snapshot.current?.props.side,\n ':data-size': () => snapshot.current?.props.size,\n },\n ]});\n },\n get viewport(): BindingObject {\n const snapshot = this.snapshot;\n const props = snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.viewport, props}),\n {\n ':data-state': () => stateFor(isExpandedState(snapshot.current?.value)),\n ':data-mode': () => snapshot.current?.props.mode,\n ':data-side': () => snapshot.current?.props.side,\n },\n ]});\n },\n get overlay(): BindingObject {\n const snapshot = this.snapshot;\n const props = snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.overlay, props, className: props.overlayClass}),\n {':data-state': () => stateFor(isExpandedState(snapshot.current?.value))},\n ]});\n },\n get panel(): BindingObject {\n const snapshot = this.snapshot;\n const props = snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.panel, props, className: props.panelClass}),\n {\n tabindex: -1,\n ':data-state': () => stateFor(isExpandedState(snapshot.current?.value)),\n ':data-mode': () => snapshot.current?.props.mode,\n ':data-side': () => snapshot.current?.props.side,\n ':data-size': () => snapshot.current?.props.size,\n ':data-ui-surface': () => snapshot.current?.props.surface,\n ':data-ui-elevation': () => snapshot.current?.props.elevation,\n },\n ]});\n },\n open(event?: Event): void {\n event?.preventDefault();\n if (currentProps().disabled) return;\n const local = localTriggerEl();\n if (local) activeTrigger = closestFocusable(local);\n bridge.send('OPEN');\n },\n close(event?: Event): void {\n event?.preventDefault();\n bridge.send('CLOSE');\n },\n };\n\n return component;\n};\n\nconst UiModalTrigger = (): TrellisAlpineComponent<ModalTriggerData> => {\n let props: ModalTriggerProps | null = null;\n let target: HTMLElement | null = null;\n let cleanup: CleanupStack = [];\n let isRegistered = false;\n\n const currentProps = (): ModalTriggerProps => {\n if (!props) throw new Error('Modal trigger has not been initialized.');\n return props;\n };\n\n const targetEl = (): HTMLElement => {\n if (!target) throw new Error('Modal trigger has not been initialized.');\n return target;\n };\n\n const modal = (): ModalController | null => {\n const name = currentProps().name;\n return name ? findNamedModal(name) : null;\n };\n\n const sync = (): void => {\n const triggerProps = currentProps();\n const trigger = targetEl();\n const modalController = modal();\n if (modalController) {\n modalController.syncExternalTrigger(trigger, triggerProps.disabled);\n return;\n }\n\n setOpenAttributes(trigger, false);\n if (triggerProps.disabled) {\n trigger.setAttribute('aria-disabled', 'true');\n trigger.setAttribute('data-disabled', '');\n } else {\n trigger.removeAttribute('aria-disabled');\n trigger.removeAttribute('data-disabled');\n }\n };\n\n const controller: ModalTriggerController = {\n get name() {\n return currentProps().name;\n },\n get target() {\n return targetEl();\n },\n sync,\n };\n\n return {\n init(): void {\n props = defineProps({\n el: this.$el,\n schema: modalTriggerSchema,\n onChange: () => {\n if (props?.name) sync();\n },\n });\n target = closestFocusable(this.$el);\n if (!props.name) return;\n modalTriggerControllers.add(controller);\n isRegistered = true;\n sync();\n\n addListener({target, event: 'click', handler: (event) => this.open(event), cleanup});\n addListener({target, event: 'keydown', handler: (event) => {\n if (!(event instanceof KeyboardEvent)) return;\n if (target instanceof HTMLButtonElement || target instanceof HTMLAnchorElement) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n this.open(event);\n }, cleanup});\n },\n destroy(): void {\n props?.disconnect();\n if (isRegistered) modalTriggerControllers.delete(controller);\n cleanup.forEach((dispose) => dispose());\n cleanup = [];\n isRegistered = false;\n props = null;\n target = null;\n },\n get root(): BindingObject {\n const triggerProps = currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.trigger, props: {}, className: triggerProps.class}),\n {\n 'data-ui-modal-trigger': '',\n ':data-name': () => props?.name || undefined,\n ':data-disabled': () => (props?.disabled ? '' : undefined),\n },\n ]});\n },\n open(event?: Event): void {\n event?.preventDefault();\n if (currentProps().disabled) return;\n modal()?.openFrom(targetEl());\n },\n };\n};\n\nconst registerModal = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiModal', UiModal)(AlpineInstance);\n defineAlpineData('UiModalTrigger', UiModalTrigger)(AlpineInstance);\n};\n\nexport {registerModal, UiModal, UiModalTrigger};\nexport type {ModalCancelDetail, ModalTransition, UiModalApi, UiModalTriggerApi};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\nimport {registerMotionCapability} from '../../capabilities/motion';\nimport {registerModal as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerModal = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerModal};\nexport default registerModal;\nexport * from './index';\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{t as e}from"./capability-motion-C_8mc71v.js";import{c as t,f as n,l as r,n as i,o as a,s as o,u as s}from"./codecs-Cb1ns_47.js";import{t as c}from"./fragment-Bl3Rq38L.js";import{t as l}from"./alpine-data-CytyCyfk.js";import{n as u,r as d,t as f}from"./virtual-window-BHdOw3Pi.js";import{t as p}from"./drag-and-drop-DHq3udf7.js";import{t as m}from"./capability-sortable-aY5GWxrK.js";import{E as h,v as g}from"./common-fH2NGblC.js";import{t as _}from"./capability-resizable-Bga8TngJ.js";var v=[`none`,`single`,`multiple`],y=[`compact`,`default`,`comfortable`],b=[`none`,`row`,`grid`],x=[`onChange`,`onEnd`],S=[``,`left`,`right`],C=[`none`,`ascending`,`descending`,`other`],w=[`start`,`center`,`end`],T={fetchUrl:n,totalRows:t.min(0).default(0),rowHeight:t.min(2**-52).default(36),bufferSize:t.min(1).default(50),overscan:t.min(0).default(0),initialIndex:t.min(0).default(0),startParam:n.default(`start`),countParam:n.default(`count`),totalParam:n.default(`total`),totalHeader:n.default(`X-Trellis-Total-Items`),assetsHeader:n.default(`X-Trellis-Assets`),metaSelector:n.default(`template[data-ui-virtualizer-meta]`),selection:r(v,`none`),selectionValue:o({mode:`ids`,ids:[]}),selectOnRowClick:i,rowKey:n.default(`id`),stickyHeader:i.default(!0),resizableColumns:i.default(!0),reorderableColumns:i.default(!0),sortableColumns:i.default(!0),minColumnWidth:t.min(0).default(60),defaultColumnWidth:t.min(2**-52).default(180),maxColumnWidth:o(null),resizeMode:r(x,`onChange`),color:r(h,`neutral`),interaction:r(g,`edge`),dragPreviewPosition:n.trim.default(`preserve`),density:r(y,`default`),border:r(b,`row`),empty:n.default(`No rows found.`),class:n,controlsClass:n,viewportClass:n,headerClass:n,rowClass:n,cellClass:n,footerClass:n,emptyClass:n};t.min(2**-52).default(180),t.min(0).default(60),o(null),r(S,``),r(C,`none`),i.default(!0),i.default(!0),r(w,`start`),o([]),o([]),t.min(0).default(0),n.default(`id`),n.default(`ui.data-grid.row`),n.default(`ui.data-grid.cell`),t.min(0).default(0),t.min(1).default(1),r(w,`start`);var E=(e,t,n)=>{let r=e.getAttribute(t);if(r===null||r.trim()===``)return n;let i=Number(r);return Number.isFinite(i)?i:n},D=(e,t,n)=>{let r=e.getAttribute(t);if(r===null||r.trim()===``)return n;let i=Number(r);return Number.isFinite(i)&&i>0?i:null},O=(e,t,n)=>{if(!e.hasAttribute(t))return n;let r=e.getAttribute(t)??``;return r===``||[`true`,`1`,`yes`,`on`].includes(r.toLowerCase())},ee=(e,t)=>{let n=new Set;return e.flatMap(e=>{let r=(e.dataset.column??``).trim();if(!r)throw Error(`Data Grid columns require a non-empty key.`);if(e.hasAttribute(`data-hidden`))return[];if(n.has(r))throw Error(`Data Grid column key "${r}" is duplicated.`);n.add(r);let i=Math.max(0,E(e,`data-min-width`,t.minWidth)),a=D(e,`data-max-width`,t.maxWidth),o=E(e,`data-width`,t.width),s=Math.min(a??1/0,Math.max(i,o)),c=e.dataset.pinned===`left`||e.dataset.pinned===`right`?e.dataset.pinned:null,l=[`ascending`,`descending`,`other`].includes(e.dataset.sort??``)?e.dataset.sort:`none`,u=[`center`,`end`].includes(e.dataset.align??``)?e.dataset.align:`start`;return[{key:r,label:e.dataset.label??e.textContent?.trim()??r,width:s,minWidth:i,maxWidth:a,hidden:!1,pinned:c,sortable:O(e,`data-sortable`,!1),sort:l,resizable:O(e,`data-resizable`,t.resizable),reorderable:O(e,`data-reorderable`,t.reorderable),align:u,cellClass:e.dataset.cellClass??``,element:e}]})},te=e=>e.map(({width:e})=>`${e}px`).join(` `),k=e=>{let t=new Map,n=new Map,r=0;return e.forEach(e=>{e.pinned===`left`&&(t.set(e.key,r),r+=e.width)}),r=0,[...e].reverse().forEach(e=>{e.pinned===`right`&&(n.set(e.key,r),r+=e.width)}),{left:t,right:n}},A=e=>globalThis.CSS?.escape?globalThis.CSS.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`),j=(e,t)=>{let n=k(t);return t.map((t,r)=>{let i=`[data-ui-data-grid-scope="${A(e)}"]`,a=`[data-column="${A(t.key)}"]`,o=`${i} [data-ui-data-grid-column-header]${a},${i} [data-ui-data-grid-cell]${a}`,s=t.pinned===`left`?`position:sticky;left:${n.left.get(t.key)??0}px;z-index:2;`:t.pinned===`right`?`position:sticky;right:${n.right.get(t.key)??0}px;z-index:2;`:``;return`${o}{grid-column:${r+1};${s}}`}).join(``)},M=(e,t)=>{if(t===`multiple`&&typeof e==`object`&&e&&e.mode===`query`){let t=e;if(typeof t.token==`string`&&Number.isFinite(t.total))return{mode:`query`,token:t.token,total:Math.max(0,Math.floor(t.total??0)),except:[...new Set(Array.isArray(t.except)?t.except.filter(e=>typeof e==`string`):[])]}}let n=typeof e==`object`&&e&&e.mode===`ids`&&Array.isArray(e.ids)?e.ids.filter(e=>typeof e==`string`):[],r=[...new Set(n)];return{mode:`ids`,ids:t===`single`?r.slice(0,1):t===`none`?[]:r}},N=(e,t)=>e.mode===`query`?!e.except.includes(t):e.ids.includes(t),P=(e,t,n,r)=>{let i=M(e,n);if(n===`none`)return{selection:i,added:[],removed:[]};let a=N(i,t),o=r??!a;if(a===o)return{selection:i,added:[],removed:[]};if(i.mode===`query`){let e=o?i.except.filter(e=>e!==t):[...i.except,t];return{selection:{...i,except:e},added:o?[t]:[],removed:o?[]:[t]}}return{selection:{mode:`ids`,ids:n===`single`&&o?[t]:o?[...i.ids,t]:i.ids.filter(e=>e!==t)},added:o?[t]:[],removed:o?[]:[t]}},F=(e,t,n)=>{let r=e.findIndex(e=>e.key===t);if(r<0||!e[r]?.reorderable)return null;let i=e[r]?.pinned??null;if(!e.flatMap((e,t)=>e.pinned===i?[t]:[]).includes(n))return null;let a=[...e],[o]=a.splice(r,1);return o?(a.splice(n,0,o),a):null},I=(e,t=0)=>Math.max(t,Math.floor(Number.isFinite(e)?e:t)),L=`a,button,input,select,textarea,[contenteditable],[role="button"],[role="link"]`,R=e=>{let t=null,n=null,r=null,i=null,o=null,l=[],m=[],h=0,g={mode:`ids`,ids:[]},_=``,v=null,y=0,b=0,x=!1,S=null,C=!1,w=new Map,E=[],D=f(u),O=(e,n)=>{t?.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:n}))},k=(e,t)=>{let n=t.split(/\s+/).filter(Boolean);n.length&&e.classList.add(...n)},A=()=>Array.from(t?.querySelectorAll(`[data-ui-data-grid-row]`)??[]),R=()=>{A().forEach(e=>{let t=e.dataset.rowKey??``,n=$.props.selection!==`none`&&t!==``&&N(g,t);e.toggleAttribute(`data-selected`,n),$.props.selection===`none`?e.removeAttribute(`aria-selected`):e.setAttribute(`aria-selected`,String(n))})},z=()=>{if(!t||!o)return;t.style.setProperty(`--ui-data-grid-template`,te(l));let e=t.dataset.uiDataGridScope??``;o.textContent=j(e,l),r?.setAttribute(`aria-colcount`,String(l.length));let n=t.querySelector(`[data-ui-data-grid-header-row]`);l.forEach(e=>n?.append(e.element));let i=n?.querySelector(`[data-ui-data-grid-column-indicator]`);i&&n?.append(i),A().forEach(e=>{let t=new Map(Array.from(e.children).flatMap(e=>e instanceof HTMLElement&&e.hasAttribute(`data-ui-data-grid-cell`)?[[e.dataset.column??``,e]]:[]));l.forEach(({key:n})=>{let r=t.get(n);r&&e.append(r)})}),l.forEach((e,t)=>{e.element.setAttribute(`aria-colindex`,String(t+1)),e.element.dataset.pinned=e.pinned??``,e.element.toggleAttribute(`data-pinned`,e.pinned!==null)}),A().forEach(e=>k(e,$.props.rowClass)),t.querySelectorAll(`[data-ui-data-grid-cell]`).forEach(e=>{let t=l.findIndex(({key:t})=>t===e.dataset.column);if(t>=0){let n=l[t];e.setAttribute(`aria-colindex`,String(t+1)),k(e,$.props.cellClass),k(e,n.cellClass),n.pinned?e.dataset.pinned=n.pinned:e.removeAttribute(`data-pinned`)}})},B=()=>{!t||!i||(t.toggleAttribute(`data-loading`,b>0),t.toggleAttribute(`data-empty`,h===0),t.dataset.selection=$.props.selection,r?.setAttribute(`aria-rowcount`,String(h+1)),t.style.setProperty(`--ui-data-grid-row-height`,`${$.props.rowHeight}px`),t.style.setProperty(`--ui-data-grid-total-height`,`${Math.max(h*$.props.rowHeight,$.props.rowHeight)}px`),i.style.height=`var(--ui-data-grid-total-height)`,R())},V=e=>{let t=I(e);t!==h&&(h=t,B(),O(`ui:data-grid-total-change`,{totalRows:h}))},H=e=>u.compute({axes:{y:{total:h,itemSize:$.props.rowHeight,viewportSize:$.props.bufferSize*$.props.rowHeight,scrollOffset:e*$.props.rowHeight,buffer:0}}}),U=e=>{if(h===0)return[];let t=I($.props.bufferSize,1),n=Math.min(h-1,Math.floor(Math.max(0,e)/$.props.rowHeight)),r=Math.floor(n/t)*t,i=Math.floor((h-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(H)},W=e=>{let t=e.axes.y;if(!t)throw Error(`Data Grid requires a vertical virtual 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}`},G=()=>{if(b=Math.max(0,b-1),B(),b>0||v===null||x)return;let e=v;v=null,q(e)},K=async(n,r,i)=>{let a=r.axes.y;if(!a)return;let o=new AbortController;w.set(n.key,o),b+=1,B(),t?.removeAttribute(`data-error`),O(`ui:data-grid-load-start`,{window:r});try{let s=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${i.requestGeneration}`,l=await fetch(W(r),{method:`GET`,headers:{Accept:`text/html`,"X-Trellis-Virtualizer":`true`,"X-Trellis-Request-ID":s},signal:o.signal});if(!l.ok&&l.status!==204){D.fail(i),t?.setAttribute(`data-error`,``),O(`ui:data-grid-error`,{window:r,status:l.status});return}let u=await d(l,$.props);if(D.pending(n.key)!==i||x||!await c(e,n.element,u.html,{assets:u.assets,shouldReplace:()=>D.pending(n.key)===i&&!x})||(u.totalItems!==null&&V(u.totalItems),!D.commit(i,r)))return;n.element.style.height=`${a.count*$.props.rowHeight}px`,n.element.style.transform=`translateY(${a.translateOffset}px)`,z(),R(),O(`ui:data-grid-load`,{window:r,start:a.start,count:a.count,end:a.start+a.count})}catch(e){if(o.signal.aborted)return;D.fail(i),t?.setAttribute(`data-error`,``),O(`ui:data-grid-error`,{window:r,status:0,error:e})}finally{w.get(n.key)===o&&w.delete(n.key),G()}},q=t=>{if(b>0){v=t;return}let n=U(t),r=Math.min(Math.max(0,h-1),Math.floor(Math.max(0,t)/$.props.rowHeight)),i=n.find(e=>{let t=e.axes.y;return t&&r>=t.start&&r<t.start+t.count})??n[0];if(i&&_!==i.key){_=i.key;let e=i.axes.y;O(`ui:data-grid-range`,{start:e.start,count:e.count,end:e.start+e.count,window:i})}if(n.length===0){m.forEach(t=>void c(e,t.element,``));return}let a=new Set;n.forEach(e=>{let t=m.find(t=>D.mounted(t.key)?.key===e.key);t&&a.add(t)});let o=m.filter(e=>!a.has(e));n.forEach(e=>{if(m.some(t=>D.mounted(t.key)?.key===e.key))return;let t=o.shift();if(!t)return;let n=D.begin(t.key,e);n&&K(t,e,n)})},J=()=>{w.forEach(e=>e.abort()),w.clear(),b=0,v=null,_=``,D.invalidate(),m.forEach(t=>{t.element.style.height=``,t.element.style.transform=``,c(e,t.element,``)}),B()},Y=(e,n)=>{g=M(e,$.props.selection),C=!0,$.props.selectionValue=g,t&&s({el:t,schema:T,key:`selectionValue`,value:g}),C=!1,R(),O(`ui:data-grid-selection-change`,{selection:g,added:n?.added??[],removed:n?.removed??[]})},X=(e,t)=>{let n=P(g,String(e),$.props.selection,t);n.added.length===0&&n.removed.length===0||Y(n.selection,n)},Z=(e,t,n)=>{e.width=Math.min(e.maxWidth??1/0,Math.max(e.minWidth,t)),z(),O(`ui:data-grid-column-resize`,{column:e.key,width:e.width,phase:n})},Q=()=>{E.splice(0).forEach(e=>e()),l.forEach(e=>{let t=e.element.querySelector(`[data-ui-data-grid-resize-handle]`);if(!t)return;let n=e.resizable&&$.props.resizableColumns;if(n?t.removeAttribute(`aria-disabled`):t.setAttribute(`aria-disabled`,`true`),t.tabIndex=n?0:-1,!n)return;let r=t=>Z(e,t.previewWidth,t.phase);E.push(p({element:e.element,handle:t,axis:`x`,min:e.minWidth,max:e.maxWidth,mode:$.props.resizeMode,disabled:()=>!$.props.resizableColumns||!e.resizable,onStart:r,onResize:r,onEnd:r}))})},$={props:null,init(){t=this.$el,x=!1;let e=globalThis.crypto?.randomUUID?.()??`grid-${Date.now()}-${Math.random().toString(36).slice(2)}`;if(t.dataset.uiDataGridScope=e,t.querySelector(`[data-ui-data-grid-header-row]`)?.setAttribute(`data-sortable-scope`,e),this.props=a({el:t,schema:T,onChange:(e,t)=>{if(C)return;let n=t.map(({key:e})=>e);(n.includes(`selectionValue`)||n.includes(`selection`))&&(g=M(this.props.selectionValue,this.props.selection),R()),n.includes(`resizableColumns`)&&Q(),n.includes(`totalRows`)?(V(this.props.totalRows),this.reload()):n.some(e=>[`fetchUrl`,`rowHeight`,`bufferSize`].includes(e))&&this.reload()}}),h=I(this.props.totalRows),g=M(this.props.selectionValue,this.props.selection),n=t.querySelector(`[data-ui-data-grid-viewport]`)??t.querySelector(`[data-ui-scroll-area-viewport]`),r=t.querySelector(`[data-ui-data-grid-inner]`),i=t.querySelector(`[data-ui-data-grid-spacer]`),o=t.querySelector(`style[data-ui-data-grid-layout]`),m=Array.from(t.querySelectorAll(`[data-ui-data-grid-block]`)).slice(0,3).map((e,t)=>({element:e,key:`block-${t+1}`})),!n||!r||!i||!o||m.length!==3)throw Error(`Data Grid requires one viewport, table owner, spacer, layout style, and three row blocks.`);n.setAttribute(`data-ui-data-grid-viewport`,``),l=ee(Array.from(t.querySelectorAll(`[data-ui-data-grid-column-header]`)),{width:this.props.defaultColumnWidth,minWidth:this.props.minColumnWidth,maxWidth:this.props.maxColumnWidth,resizable:this.props.resizableColumns,reorderable:this.props.reorderableColumns}),z(),Q(),S=new AbortController,n.addEventListener(`scroll`,()=>{y||=requestAnimationFrame(()=>{y=0,n&&q(n.scrollTop)})},{passive:!0,signal:S.signal}),t.addEventListener(`click`,e=>{let n=e.target,r=n.closest(`[data-ui-data-grid-sort-button]`);if(r&&this.props.sortableColumns){let t=r.closest(`[data-ui-data-grid-column-header]`),n=l.find(({key:e})=>e===t?.dataset.column);if(n?.sortable){let t=n.sort===`ascending`?`descending`:`ascending`;O(`ui:data-grid-sort`,{column:n.key,direction:t,additive:e.shiftKey})}return}let i=n.closest(`[data-ui-data-grid-row]`);if(!i||!t?.contains(i))return;let a=i.dataset.rowKey??``;this.props.selectOnRowClick&&!n.closest(L)&&X(a),O(`ui:data-grid-row-activate`,{rowKey:a,row:i})},{signal:S.signal}),t.addEventListener(`dblclick`,e=>{let t=e.target.closest(`[data-ui-data-grid-cell]`),n=t?.closest(`[data-ui-data-grid-row]`);t&&n&&O(`ui:data-grid-cell-activate`,{rowKey:n.dataset.rowKey??``,column:t.dataset.column??``,cell:t})},{signal:S.signal}),t.addEventListener(`ui:sortable-drop`,(e=>{let t=e.detail?.source;if(t?.type!==`data-grid-column`)return;let n=Number(e.detail?.index??e.detail?.anchor?.index);Number.isInteger(n)&&this.reorderColumn(String(t.id),n)}),{signal:S.signal}),n.style.overscrollBehavior=`contain`,n.style.overflowAnchor=`none`,n.scrollTop=u.scrollTo({total:h,itemSize:this.props.rowHeight,viewportSize:n.clientHeight,scrollOffset:0,buffer:this.props.bufferSize},{axis:`y`,index:this.props.initialIndex}),B(),q(n.scrollTop)},destroy(){x=!0,y&&cancelAnimationFrame(y),S?.abort(),S=null,E.splice(0).forEach(e=>e()),J(),this.props.disconnect(),t=null,n=null,r=null,i=null,o=null,l=[],m=[]},scrollToIndex(e,t=`start`){n&&(n.scrollTop=u.scrollTo({total:h,itemSize:this.props.rowHeight,viewportSize:n.clientHeight,scrollOffset:n.scrollTop,buffer:this.props.bufferSize},{axis:`y`,index:e,align:t}),q(n.scrollTop))},setTotalRows(e){V(e),this.reload({scrollTop:n?.scrollTop??0})},setUrl(e,n={}){C=!0,this.props.fetchUrl=String(e),t&&s({el:t,schema:T,key:`fetchUrl`,value:String(e)}),C=!1,n.reset??!0?this.reset():this.reload()},reset(e={}){this.reload({scrollTop:e.scrollTop??0})},reload(e={}){let t=e.scrollTop??n?.scrollTop??0;J(),n&&(n.scrollTop=Math.max(0,t)),q(t)},resizeColumn(e,t){let n=l.find(t=>t.key===e);n&&Z(n,Number(t),`end`)},reorderColumn(e,t){let n=l.findIndex(t=>t.key===e),r=F(l,e,I(t));r&&(l=r,z(),O(`ui:data-grid-column-reorder`,{column:e,from:n,to:I(t),columns:l.map(({key:e})=>e)}))},selectRow(e){X(String(e),!0)},deselectRow(e){X(String(e),!1)},toggleRow(e){X(String(e))},setSelection(e){Y(e)},selectQuery(e,t,n=[]){Y({mode:`query`,token:String(e),total:I(t),except:n.map(String)})},clearSelection(){Y({mode:`ids`,ids:[]})}};return $},z=e=>{l(`UiDataGrid`,()=>R(e))(e)},B=new WeakSet,V=t=>{B.has(t)||(B.add(t),_(t),e(t),m(t),z(t))};export{R as n,V as t};
2
- //# sourceMappingURL=entry.generated-Ck7bhyzz.js.map
1
+ import{t as e}from"./capability-motion-DCacA4wj.js";import{c as t,f as n,l as r,n as i,o as a,s as o,u as s}from"./codecs-Cb1ns_47.js";import{t as c}from"./fragment-Bl3Rq38L.js";import{t as l}from"./alpine-data-CytyCyfk.js";import{n as u,r as d,t as f}from"./virtual-window-BHdOw3Pi.js";import{t as p}from"./drag-and-drop-DHq3udf7.js";import{t as m}from"./capability-sortable-BnB9Wz0E.js";import{L as h,y as g}from"./common-Dfj6NCjU.js";import{t as _}from"./capability-resizable-Bga8TngJ.js";var v=[`none`,`single`,`multiple`],y=[`compact`,`default`,`comfortable`],b=[`none`,`row`,`grid`],x=[`onChange`,`onEnd`],S=[``,`left`,`right`],C=[`none`,`ascending`,`descending`,`other`],w=[`start`,`center`,`end`],T={fetchUrl:n,totalRows:t.min(0).default(0),rowHeight:t.min(2**-52).default(36),bufferSize:t.min(1).default(50),overscan:t.min(0).default(0),initialIndex:t.min(0).default(0),startParam:n.default(`start`),countParam:n.default(`count`),totalParam:n.default(`total`),totalHeader:n.default(`X-Trellis-Total-Items`),assetsHeader:n.default(`X-Trellis-Assets`),metaSelector:n.default(`template[data-ui-virtualizer-meta]`),selection:r(v,`none`),selectionValue:o({mode:`ids`,ids:[]}),selectOnRowClick:i,rowKey:n.default(`id`),stickyHeader:i.default(!0),resizableColumns:i.default(!0),reorderableColumns:i.default(!0),sortableColumns:i.default(!0),minColumnWidth:t.min(0).default(60),defaultColumnWidth:t.min(2**-52).default(180),maxColumnWidth:o(null),resizeMode:r(x,`onChange`),color:r(h,`neutral`),interaction:r(g,`edge`),dragPreviewPosition:n.trim.default(`preserve`),density:r(y,`default`),border:r(b,`row`),empty:n.default(`No rows found.`),class:n,controlsClass:n,viewportClass:n,headerClass:n,rowClass:n,cellClass:n,footerClass:n,emptyClass:n};t.min(2**-52).default(180),t.min(0).default(60),o(null),r(S,``),r(C,`none`),i.default(!0),i.default(!0),r(w,`start`),o([]),o([]),t.min(0).default(0),n.default(`id`),n.default(`ui.data-grid.row`),n.default(`ui.data-grid.cell`),t.min(0).default(0),t.min(1).default(1),r(w,`start`);var E=(e,t,n)=>{let r=e.getAttribute(t);if(r===null||r.trim()===``)return n;let i=Number(r);return Number.isFinite(i)?i:n},D=(e,t,n)=>{let r=e.getAttribute(t);if(r===null||r.trim()===``)return n;let i=Number(r);return Number.isFinite(i)&&i>0?i:null},O=(e,t,n)=>{if(!e.hasAttribute(t))return n;let r=e.getAttribute(t)??``;return r===``||[`true`,`1`,`yes`,`on`].includes(r.toLowerCase())},ee=(e,t)=>{let n=new Set;return e.flatMap(e=>{let r=(e.dataset.column??``).trim();if(!r)throw Error(`Data Grid columns require a non-empty key.`);if(e.hasAttribute(`data-hidden`))return[];if(n.has(r))throw Error(`Data Grid column key "${r}" is duplicated.`);n.add(r);let i=Math.max(0,E(e,`data-min-width`,t.minWidth)),a=D(e,`data-max-width`,t.maxWidth),o=E(e,`data-width`,t.width),s=Math.min(a??1/0,Math.max(i,o)),c=e.dataset.pinned===`left`||e.dataset.pinned===`right`?e.dataset.pinned:null,l=[`ascending`,`descending`,`other`].includes(e.dataset.sort??``)?e.dataset.sort:`none`,u=[`center`,`end`].includes(e.dataset.align??``)?e.dataset.align:`start`;return[{key:r,label:e.dataset.label??e.textContent?.trim()??r,width:s,minWidth:i,maxWidth:a,hidden:!1,pinned:c,sortable:O(e,`data-sortable`,!1),sort:l,resizable:O(e,`data-resizable`,t.resizable),reorderable:O(e,`data-reorderable`,t.reorderable),align:u,cellClass:e.dataset.cellClass??``,element:e}]})},te=e=>e.map(({width:e})=>`${e}px`).join(` `),k=e=>{let t=new Map,n=new Map,r=0;return e.forEach(e=>{e.pinned===`left`&&(t.set(e.key,r),r+=e.width)}),r=0,[...e].reverse().forEach(e=>{e.pinned===`right`&&(n.set(e.key,r),r+=e.width)}),{left:t,right:n}},A=e=>globalThis.CSS?.escape?globalThis.CSS.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`),j=(e,t)=>{let n=k(t);return t.map((t,r)=>{let i=`[data-ui-data-grid-scope="${A(e)}"]`,a=`[data-column="${A(t.key)}"]`,o=`${i} [data-ui-data-grid-column-header]${a},${i} [data-ui-data-grid-cell]${a}`,s=t.pinned===`left`?`position:sticky;left:${n.left.get(t.key)??0}px;z-index:2;`:t.pinned===`right`?`position:sticky;right:${n.right.get(t.key)??0}px;z-index:2;`:``;return`${o}{grid-column:${r+1};${s}}`}).join(``)},M=(e,t)=>{if(t===`multiple`&&typeof e==`object`&&e&&e.mode===`query`){let t=e;if(typeof t.token==`string`&&Number.isFinite(t.total))return{mode:`query`,token:t.token,total:Math.max(0,Math.floor(t.total??0)),except:[...new Set(Array.isArray(t.except)?t.except.filter(e=>typeof e==`string`):[])]}}let n=typeof e==`object`&&e&&e.mode===`ids`&&Array.isArray(e.ids)?e.ids.filter(e=>typeof e==`string`):[],r=[...new Set(n)];return{mode:`ids`,ids:t===`single`?r.slice(0,1):t===`none`?[]:r}},N=(e,t)=>e.mode===`query`?!e.except.includes(t):e.ids.includes(t),P=(e,t,n,r)=>{let i=M(e,n);if(n===`none`)return{selection:i,added:[],removed:[]};let a=N(i,t),o=r??!a;if(a===o)return{selection:i,added:[],removed:[]};if(i.mode===`query`){let e=o?i.except.filter(e=>e!==t):[...i.except,t];return{selection:{...i,except:e},added:o?[t]:[],removed:o?[]:[t]}}return{selection:{mode:`ids`,ids:n===`single`&&o?[t]:o?[...i.ids,t]:i.ids.filter(e=>e!==t)},added:o?[t]:[],removed:o?[]:[t]}},F=(e,t,n)=>{let r=e.findIndex(e=>e.key===t);if(r<0||!e[r]?.reorderable)return null;let i=e[r]?.pinned??null;if(!e.flatMap((e,t)=>e.pinned===i?[t]:[]).includes(n))return null;let a=[...e],[o]=a.splice(r,1);return o?(a.splice(n,0,o),a):null},I=(e,t=0)=>Math.max(t,Math.floor(Number.isFinite(e)?e:t)),L=`a,button,input,select,textarea,[contenteditable],[role="button"],[role="link"]`,R=e=>{let t=null,n=null,r=null,i=null,o=null,l=[],m=[],h=0,g={mode:`ids`,ids:[]},_=``,v=null,y=0,b=0,x=!1,S=null,C=!1,w=new Map,E=[],D=f(u),O=(e,n)=>{t?.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:n}))},k=(e,t)=>{let n=t.split(/\s+/).filter(Boolean);n.length&&e.classList.add(...n)},A=()=>Array.from(t?.querySelectorAll(`[data-ui-data-grid-row]`)??[]),R=()=>{A().forEach(e=>{let t=e.dataset.rowKey??``,n=$.props.selection!==`none`&&t!==``&&N(g,t);e.toggleAttribute(`data-selected`,n),$.props.selection===`none`?e.removeAttribute(`aria-selected`):e.setAttribute(`aria-selected`,String(n))})},z=()=>{if(!t||!o)return;t.style.setProperty(`--ui-data-grid-template`,te(l));let e=t.dataset.uiDataGridScope??``;o.textContent=j(e,l),r?.setAttribute(`aria-colcount`,String(l.length));let n=t.querySelector(`[data-ui-data-grid-header-row]`);l.forEach(e=>n?.append(e.element));let i=n?.querySelector(`[data-ui-data-grid-column-indicator]`);i&&n?.append(i),A().forEach(e=>{let t=new Map(Array.from(e.children).flatMap(e=>e instanceof HTMLElement&&e.hasAttribute(`data-ui-data-grid-cell`)?[[e.dataset.column??``,e]]:[]));l.forEach(({key:n})=>{let r=t.get(n);r&&e.append(r)})}),l.forEach((e,t)=>{e.element.setAttribute(`aria-colindex`,String(t+1)),e.element.dataset.pinned=e.pinned??``,e.element.toggleAttribute(`data-pinned`,e.pinned!==null)}),A().forEach(e=>k(e,$.props.rowClass)),t.querySelectorAll(`[data-ui-data-grid-cell]`).forEach(e=>{let t=l.findIndex(({key:t})=>t===e.dataset.column);if(t>=0){let n=l[t];e.setAttribute(`aria-colindex`,String(t+1)),k(e,$.props.cellClass),k(e,n.cellClass),n.pinned?e.dataset.pinned=n.pinned:e.removeAttribute(`data-pinned`)}})},B=()=>{!t||!i||(t.toggleAttribute(`data-loading`,b>0),t.toggleAttribute(`data-empty`,h===0),t.dataset.selection=$.props.selection,r?.setAttribute(`aria-rowcount`,String(h+1)),t.style.setProperty(`--ui-data-grid-row-height`,`${$.props.rowHeight}px`),t.style.setProperty(`--ui-data-grid-total-height`,`${Math.max(h*$.props.rowHeight,$.props.rowHeight)}px`),i.style.height=`var(--ui-data-grid-total-height)`,R())},V=e=>{let t=I(e);t!==h&&(h=t,B(),O(`ui:data-grid-total-change`,{totalRows:h}))},H=e=>u.compute({axes:{y:{total:h,itemSize:$.props.rowHeight,viewportSize:$.props.bufferSize*$.props.rowHeight,scrollOffset:e*$.props.rowHeight,buffer:0}}}),U=e=>{if(h===0)return[];let t=I($.props.bufferSize,1),n=Math.min(h-1,Math.floor(Math.max(0,e)/$.props.rowHeight)),r=Math.floor(n/t)*t,i=Math.floor((h-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(H)},W=e=>{let t=e.axes.y;if(!t)throw Error(`Data Grid requires a vertical virtual 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}`},G=()=>{if(b=Math.max(0,b-1),B(),b>0||v===null||x)return;let e=v;v=null,q(e)},K=async(n,r,i)=>{let a=r.axes.y;if(!a)return;let o=new AbortController;w.set(n.key,o),b+=1,B(),t?.removeAttribute(`data-error`),O(`ui:data-grid-load-start`,{window:r});try{let s=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${i.requestGeneration}`,l=await fetch(W(r),{method:`GET`,headers:{Accept:`text/html`,"X-Trellis-Virtualizer":`true`,"X-Trellis-Request-ID":s},signal:o.signal});if(!l.ok&&l.status!==204){D.fail(i),t?.setAttribute(`data-error`,``),O(`ui:data-grid-error`,{window:r,status:l.status});return}let u=await d(l,$.props);if(D.pending(n.key)!==i||x||!await c(e,n.element,u.html,{assets:u.assets,shouldReplace:()=>D.pending(n.key)===i&&!x})||(u.totalItems!==null&&V(u.totalItems),!D.commit(i,r)))return;n.element.style.height=`${a.count*$.props.rowHeight}px`,n.element.style.transform=`translateY(${a.translateOffset}px)`,z(),R(),O(`ui:data-grid-load`,{window:r,start:a.start,count:a.count,end:a.start+a.count})}catch(e){if(o.signal.aborted)return;D.fail(i),t?.setAttribute(`data-error`,``),O(`ui:data-grid-error`,{window:r,status:0,error:e})}finally{w.get(n.key)===o&&w.delete(n.key),G()}},q=t=>{if(b>0){v=t;return}let n=U(t),r=Math.min(Math.max(0,h-1),Math.floor(Math.max(0,t)/$.props.rowHeight)),i=n.find(e=>{let t=e.axes.y;return t&&r>=t.start&&r<t.start+t.count})??n[0];if(i&&_!==i.key){_=i.key;let e=i.axes.y;O(`ui:data-grid-range`,{start:e.start,count:e.count,end:e.start+e.count,window:i})}if(n.length===0){m.forEach(t=>void c(e,t.element,``));return}let a=new Set;n.forEach(e=>{let t=m.find(t=>D.mounted(t.key)?.key===e.key);t&&a.add(t)});let o=m.filter(e=>!a.has(e));n.forEach(e=>{if(m.some(t=>D.mounted(t.key)?.key===e.key))return;let t=o.shift();if(!t)return;let n=D.begin(t.key,e);n&&K(t,e,n)})},J=()=>{w.forEach(e=>e.abort()),w.clear(),b=0,v=null,_=``,D.invalidate(),m.forEach(t=>{t.element.style.height=``,t.element.style.transform=``,c(e,t.element,``)}),B()},Y=(e,n)=>{g=M(e,$.props.selection),C=!0,$.props.selectionValue=g,t&&s({el:t,schema:T,key:`selectionValue`,value:g}),C=!1,R(),O(`ui:data-grid-selection-change`,{selection:g,added:n?.added??[],removed:n?.removed??[]})},X=(e,t)=>{let n=P(g,String(e),$.props.selection,t);n.added.length===0&&n.removed.length===0||Y(n.selection,n)},Z=(e,t,n)=>{e.width=Math.min(e.maxWidth??1/0,Math.max(e.minWidth,t)),z(),O(`ui:data-grid-column-resize`,{column:e.key,width:e.width,phase:n})},Q=()=>{E.splice(0).forEach(e=>e()),l.forEach(e=>{let t=e.element.querySelector(`[data-ui-data-grid-resize-handle]`);if(!t)return;let n=e.resizable&&$.props.resizableColumns;if(n?t.removeAttribute(`aria-disabled`):t.setAttribute(`aria-disabled`,`true`),t.tabIndex=n?0:-1,!n)return;let r=t=>Z(e,t.previewWidth,t.phase);E.push(p({element:e.element,handle:t,axis:`x`,min:e.minWidth,max:e.maxWidth,mode:$.props.resizeMode,disabled:()=>!$.props.resizableColumns||!e.resizable,onStart:r,onResize:r,onEnd:r}))})},$={props:null,init(){t=this.$el,x=!1;let e=globalThis.crypto?.randomUUID?.()??`grid-${Date.now()}-${Math.random().toString(36).slice(2)}`;if(t.dataset.uiDataGridScope=e,t.querySelector(`[data-ui-data-grid-header-row]`)?.setAttribute(`data-sortable-scope`,e),this.props=a({el:t,schema:T,onChange:(e,t)=>{if(C)return;let n=t.map(({key:e})=>e);(n.includes(`selectionValue`)||n.includes(`selection`))&&(g=M(this.props.selectionValue,this.props.selection),R()),n.includes(`resizableColumns`)&&Q(),n.includes(`totalRows`)?(V(this.props.totalRows),this.reload()):n.some(e=>[`fetchUrl`,`rowHeight`,`bufferSize`].includes(e))&&this.reload()}}),h=I(this.props.totalRows),g=M(this.props.selectionValue,this.props.selection),n=t.querySelector(`[data-ui-data-grid-viewport]`)??t.querySelector(`[data-ui-scroll-area-viewport]`),r=t.querySelector(`[data-ui-data-grid-inner]`),i=t.querySelector(`[data-ui-data-grid-spacer]`),o=t.querySelector(`style[data-ui-data-grid-layout]`),m=Array.from(t.querySelectorAll(`[data-ui-data-grid-block]`)).slice(0,3).map((e,t)=>({element:e,key:`block-${t+1}`})),!n||!r||!i||!o||m.length!==3)throw Error(`Data Grid requires one viewport, table owner, spacer, layout style, and three row blocks.`);n.setAttribute(`data-ui-data-grid-viewport`,``),l=ee(Array.from(t.querySelectorAll(`[data-ui-data-grid-column-header]`)),{width:this.props.defaultColumnWidth,minWidth:this.props.minColumnWidth,maxWidth:this.props.maxColumnWidth,resizable:this.props.resizableColumns,reorderable:this.props.reorderableColumns}),z(),Q(),S=new AbortController,n.addEventListener(`scroll`,()=>{y||=requestAnimationFrame(()=>{y=0,n&&q(n.scrollTop)})},{passive:!0,signal:S.signal}),t.addEventListener(`click`,e=>{let n=e.target,r=n.closest(`[data-ui-data-grid-sort-button]`);if(r&&this.props.sortableColumns){let t=r.closest(`[data-ui-data-grid-column-header]`),n=l.find(({key:e})=>e===t?.dataset.column);if(n?.sortable){let t=n.sort===`ascending`?`descending`:`ascending`;O(`ui:data-grid-sort`,{column:n.key,direction:t,additive:e.shiftKey})}return}let i=n.closest(`[data-ui-data-grid-row]`);if(!i||!t?.contains(i))return;let a=i.dataset.rowKey??``;this.props.selectOnRowClick&&!n.closest(L)&&X(a),O(`ui:data-grid-row-activate`,{rowKey:a,row:i})},{signal:S.signal}),t.addEventListener(`dblclick`,e=>{let t=e.target.closest(`[data-ui-data-grid-cell]`),n=t?.closest(`[data-ui-data-grid-row]`);t&&n&&O(`ui:data-grid-cell-activate`,{rowKey:n.dataset.rowKey??``,column:t.dataset.column??``,cell:t})},{signal:S.signal}),t.addEventListener(`ui:sortable-drop`,(e=>{let t=e.detail?.source;if(t?.type!==`data-grid-column`)return;let n=Number(e.detail?.index??e.detail?.anchor?.index);Number.isInteger(n)&&this.reorderColumn(String(t.id),n)}),{signal:S.signal}),n.style.overscrollBehavior=`contain`,n.style.overflowAnchor=`none`,n.scrollTop=u.scrollTo({total:h,itemSize:this.props.rowHeight,viewportSize:n.clientHeight,scrollOffset:0,buffer:this.props.bufferSize},{axis:`y`,index:this.props.initialIndex}),B(),q(n.scrollTop)},destroy(){x=!0,y&&cancelAnimationFrame(y),S?.abort(),S=null,E.splice(0).forEach(e=>e()),J(),this.props.disconnect(),t=null,n=null,r=null,i=null,o=null,l=[],m=[]},scrollToIndex(e,t=`start`){n&&(n.scrollTop=u.scrollTo({total:h,itemSize:this.props.rowHeight,viewportSize:n.clientHeight,scrollOffset:n.scrollTop,buffer:this.props.bufferSize},{axis:`y`,index:e,align:t}),q(n.scrollTop))},setTotalRows(e){V(e),this.reload({scrollTop:n?.scrollTop??0})},setUrl(e,n={}){C=!0,this.props.fetchUrl=String(e),t&&s({el:t,schema:T,key:`fetchUrl`,value:String(e)}),C=!1,n.reset??!0?this.reset():this.reload()},reset(e={}){this.reload({scrollTop:e.scrollTop??0})},reload(e={}){let t=e.scrollTop??n?.scrollTop??0;J(),n&&(n.scrollTop=Math.max(0,t)),q(t)},resizeColumn(e,t){let n=l.find(t=>t.key===e);n&&Z(n,Number(t),`end`)},reorderColumn(e,t){let n=l.findIndex(t=>t.key===e),r=F(l,e,I(t));r&&(l=r,z(),O(`ui:data-grid-column-reorder`,{column:e,from:n,to:I(t),columns:l.map(({key:e})=>e)}))},selectRow(e){X(String(e),!0)},deselectRow(e){X(String(e),!1)},toggleRow(e){X(String(e))},setSelection(e){Y(e)},selectQuery(e,t,n=[]){Y({mode:`query`,token:String(e),total:I(t),except:n.map(String)})},clearSelection(){Y({mode:`ids`,ids:[]})}};return $},z=e=>{l(`UiDataGrid`,()=>R(e))(e)},B=new WeakSet,V=t=>{B.has(t)||(B.add(t),_(t),e(t),m(t),z(t))};export{R as n,V as t};
2
+ //# sourceMappingURL=entry.generated-BUbxiHwA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entry.generated-Ck7bhyzz.js","names":[],"sources":["../../../../../../../../client/src/components/data-grid/contract.ts","../../../../../../../../client/src/components/data-grid/model.ts","../../../../../../../../client/src/components/data-grid/index.ts","../../../../../../../../client/src/components/data-grid/entry.generated.ts"],"sourcesContent":["import {bool, json, number, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {INTERACTION_TREATMENTS, SELECTION_COLORS} from '../common';\n\nconst DATA_GRID_SELECTIONS = ['none', 'single', 'multiple'] as const;\nconst DATA_GRID_DENSITIES = ['compact', 'default', 'comfortable'] as const;\nconst DATA_GRID_BORDERS = ['none', 'row', 'grid'] as const;\nconst DATA_GRID_RESIZE_MODES = ['onChange', 'onEnd'] as const;\nconst DATA_GRID_PINS = ['', 'left', 'right'] as const;\nconst DATA_GRID_SORTS = ['none', 'ascending', 'descending', 'other'] as const;\nconst DATA_GRID_ALIGNS = ['start', 'center', 'end'] as const;\n\ntype DataGridSelectionValue =\n | {mode: 'ids'; ids: string[]}\n | {mode: 'query'; token: string; total: number; except: string[]};\n\nconst dataGridSchema = {\n fetchUrl: string,\n totalRows: number.min(0).default(0),\n rowHeight: number.min(Number.EPSILON).default(36),\n bufferSize: number.min(1).default(50),\n overscan: number.min(0).default(0),\n initialIndex: number.min(0).default(0),\n startParam: string.default('start'),\n countParam: string.default('count'),\n totalParam: string.default('total'),\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 selection: oneOf(DATA_GRID_SELECTIONS, 'none'),\n selectionValue: json<DataGridSelectionValue>({mode: 'ids', ids: []}),\n selectOnRowClick: bool,\n rowKey: string.default('id'),\n stickyHeader: bool.default(true),\n resizableColumns: bool.default(true),\n reorderableColumns: bool.default(true),\n sortableColumns: bool.default(true),\n minColumnWidth: number.min(0).default(60),\n defaultColumnWidth: number.min(Number.EPSILON).default(180),\n maxColumnWidth: json<number | null>(null),\n resizeMode: oneOf(DATA_GRID_RESIZE_MODES, 'onChange'),\n color: oneOf(SELECTION_COLORS, 'neutral'),\n interaction: oneOf(INTERACTION_TREATMENTS, 'edge'),\n dragPreviewPosition: string.trim.default('preserve'),\n density: oneOf(DATA_GRID_DENSITIES, 'default'),\n border: oneOf(DATA_GRID_BORDERS, 'row'),\n empty: string.default('No rows found.'),\n class: string,\n controlsClass: string,\n viewportClass: string,\n headerClass: string,\n rowClass: string,\n cellClass: string,\n footerClass: string,\n emptyClass: string,\n};\n\nconst dataGridColumnSchema = {\n key: string,\n label: string,\n width: number.min(Number.EPSILON).default(180),\n minWidth: number.min(0).default(60),\n maxWidth: json<number | null>(null),\n hidden: bool,\n pinned: oneOf(DATA_GRID_PINS, ''),\n sortable: bool,\n sort: oneOf(DATA_GRID_SORTS, 'none'),\n resizable: bool.default(true),\n reorderable: bool.default(true),\n align: oneOf(DATA_GRID_ALIGNS, 'start'),\n class: string,\n headerClass: string,\n labelClass: string,\n resizeHandleClass: string,\n};\n\nconst dataGridRowsSchema = {\n rows: json<unknown[]>([]),\n columns: json<Array<Record<string, unknown>>>([]),\n startIndex: number.min(0).default(0),\n rowKey: string.default('id'),\n rowComponent: string.default('ui.data-grid.row'),\n cellComponent: string.default('ui.data-grid.cell'),\n class: string,\n};\nconst dataGridRowSchema = {key: string, index: number.min(0).default(0), class: string};\nconst dataGridCellSchema = {column: string, index: number.min(1).default(1), align: oneOf(DATA_GRID_ALIGNS, 'start'), class: string};\nconst dataGridEmptySchema = {class: string};\n\ntype DataGridProps = SchemaToProps<typeof dataGridSchema>;\ntype DataGridColumnProps = SchemaToProps<typeof dataGridColumnSchema>;\ntype DataGridRowsProps = SchemaToProps<typeof dataGridRowsSchema>;\ntype DataGridSelection = typeof DATA_GRID_SELECTIONS[number];\ntype DataGridPin = Exclude<typeof DATA_GRID_PINS[number], ''> | null;\ntype DataGridSort = typeof DATA_GRID_SORTS[number];\ntype DataGridAlign = typeof DATA_GRID_ALIGNS[number];\n\nexport {\n DATA_GRID_ALIGNS,\n DATA_GRID_BORDERS,\n DATA_GRID_DENSITIES,\n DATA_GRID_PINS,\n DATA_GRID_RESIZE_MODES,\n DATA_GRID_SELECTIONS,\n DATA_GRID_SORTS,\n dataGridCellSchema,\n dataGridColumnSchema,\n dataGridEmptySchema,\n dataGridRowSchema,\n dataGridRowsSchema,\n dataGridSchema,\n};\nexport type {\n DataGridAlign,\n DataGridColumnProps,\n DataGridPin,\n DataGridProps,\n DataGridRowsProps,\n DataGridSelection,\n DataGridSelectionValue,\n DataGridSort,\n};\n","import type {DataGridAlign, DataGridPin, DataGridSelection, DataGridSelectionValue, DataGridSort} from './contract';\n\ntype DataGridColumn = {\n key: string;\n label: string;\n width: number;\n minWidth: number;\n maxWidth: number | null;\n hidden: boolean;\n pinned: DataGridPin;\n sortable: boolean;\n sort: DataGridSort;\n resizable: boolean;\n reorderable: boolean;\n align: DataGridAlign;\n cellClass: string;\n element: HTMLElement;\n};\n\ntype DataGridColumnDefaults = {\n width: number;\n minWidth: number;\n maxWidth: number | null;\n resizable: boolean;\n reorderable: boolean;\n};\n\ntype DataGridPinnedOffsets = {left: Map<string, number>; right: Map<string, number>};\ntype SelectionChange = {selection: DataGridSelectionValue; added: string[]; removed: string[]};\n\nconst numberAttribute = (element: HTMLElement, name: string, fallback: number): number => {\n const raw = element.getAttribute(name);\n if (raw === null || raw.trim() === '') return fallback;\n const value = Number(raw);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst optionalNumberAttribute = (element: HTMLElement, name: string, fallback: number | null): number | null => {\n const raw = element.getAttribute(name);\n if (raw === null || raw.trim() === '') return fallback;\n const value = Number(raw);\n return Number.isFinite(value) && value > 0 ? value : null;\n};\n\nconst boolAttribute = (element: HTMLElement, name: string, fallback: boolean): boolean => {\n if (!element.hasAttribute(name)) return fallback;\n const raw = element.getAttribute(name) ?? '';\n return raw === '' || ['true', '1', 'yes', 'on'].includes(raw.toLowerCase());\n};\n\nconst normalizeDataGridColumns = (\n elements: readonly HTMLElement[],\n defaults: DataGridColumnDefaults,\n): DataGridColumn[] => {\n const seen = new Set<string>();\n return elements.flatMap((element) => {\n const key = (element.dataset.column ?? '').trim();\n if (!key) throw new Error('Data Grid columns require a non-empty key.');\n if (element.hasAttribute('data-hidden')) return [];\n if (seen.has(key)) throw new Error(`Data Grid column key \"${key}\" is duplicated.`);\n seen.add(key);\n const minWidth = Math.max(0, numberAttribute(element, 'data-min-width', defaults.minWidth));\n const maxWidth = optionalNumberAttribute(element, 'data-max-width', defaults.maxWidth);\n const unclamped = numberAttribute(element, 'data-width', defaults.width);\n const width = Math.min(maxWidth ?? Number.POSITIVE_INFINITY, Math.max(minWidth, unclamped));\n const pinned = element.dataset.pinned === 'left' || element.dataset.pinned === 'right'\n ? element.dataset.pinned\n : null;\n const sort = ['ascending', 'descending', 'other'].includes(element.dataset.sort ?? '')\n ? element.dataset.sort as DataGridSort\n : 'none';\n const align = ['center', 'end'].includes(element.dataset.align ?? '')\n ? element.dataset.align as DataGridAlign\n : 'start';\n return [{\n key,\n label: element.dataset.label ?? element.textContent?.trim() ?? key,\n width,\n minWidth,\n maxWidth,\n hidden: false,\n pinned,\n sortable: boolAttribute(element, 'data-sortable', false),\n sort,\n resizable: boolAttribute(element, 'data-resizable', defaults.resizable),\n reorderable: boolAttribute(element, 'data-reorderable', defaults.reorderable),\n align,\n cellClass: element.dataset.cellClass ?? '',\n element,\n }];\n });\n};\n\nconst columnTemplate = (columns: readonly DataGridColumn[]): string => (\n columns.map(({width}) => `${width}px`).join(' ')\n);\n\nconst pinnedOffsets = (columns: readonly DataGridColumn[]): DataGridPinnedOffsets => {\n const left = new Map<string, number>();\n const right = new Map<string, number>();\n let offset = 0;\n columns.forEach((column) => {\n if (column.pinned !== 'left') return;\n left.set(column.key, offset);\n offset += column.width;\n });\n offset = 0;\n [...columns].reverse().forEach((column) => {\n if (column.pinned !== 'right') return;\n right.set(column.key, offset);\n offset += column.width;\n });\n return {left, right};\n};\n\nconst cssEscape = (value: string): string => (\n globalThis.CSS?.escape ? globalThis.CSS.escape(value) : value.replace(/[^a-zA-Z0-9_-]/g, (character) => `\\\\${character}`)\n);\n\nconst dataGridLayoutCss = (scope: string, columns: readonly DataGridColumn[]): string => {\n const offsets = pinnedOffsets(columns);\n return columns.map((column, index) => {\n const owner = `[data-ui-data-grid-scope=\"${cssEscape(scope)}\"]`;\n const columnSelector = `[data-column=\"${cssEscape(column.key)}\"]`;\n const selector = `${owner} [data-ui-data-grid-column-header]${columnSelector},${owner} [data-ui-data-grid-cell]${columnSelector}`;\n const pin = column.pinned === 'left'\n ? `position:sticky;left:${offsets.left.get(column.key) ?? 0}px;z-index:2;`\n : column.pinned === 'right'\n ? `position:sticky;right:${offsets.right.get(column.key) ?? 0}px;z-index:2;`\n : '';\n return `${selector}{grid-column:${index + 1};${pin}}`;\n }).join('');\n};\n\nconst normalizeSelection = (value: unknown, mode: DataGridSelection): DataGridSelectionValue => {\n if (mode === 'multiple' && typeof value === 'object' && value !== null && (value as {mode?: unknown}).mode === 'query') {\n const query = value as Partial<Extract<DataGridSelectionValue, {mode: 'query'}>>;\n if (typeof query.token === 'string' && Number.isFinite(query.total)) return {\n mode: 'query',\n token: query.token,\n total: Math.max(0, Math.floor(query.total ?? 0)),\n except: [...new Set(Array.isArray(query.except) ? query.except.filter((key): key is string => typeof key === 'string') : [])],\n };\n }\n const ids = typeof value === 'object' && value !== null && (value as {mode?: unknown}).mode === 'ids'\n && Array.isArray((value as {ids?: unknown}).ids)\n ? (value as {ids: unknown[]}).ids.filter((key): key is string => typeof key === 'string')\n : [];\n const unique = [...new Set(ids)];\n return {mode: 'ids', ids: mode === 'single' ? unique.slice(0, 1) : mode === 'none' ? [] : unique};\n};\n\nconst isRowSelected = (selection: DataGridSelectionValue, key: string): boolean => (\n selection.mode === 'query' ? !selection.except.includes(key) : selection.ids.includes(key)\n);\n\nconst toggleSelection = (\n current: DataGridSelectionValue,\n key: string,\n mode: DataGridSelection,\n selected?: boolean,\n): SelectionChange => {\n const normalized = normalizeSelection(current, mode);\n if (mode === 'none') return {selection: normalized, added: [], removed: []};\n const wasSelected = isRowSelected(normalized, key);\n const nextSelected = selected ?? !wasSelected;\n if (wasSelected === nextSelected) return {selection: normalized, added: [], removed: []};\n if (normalized.mode === 'query') {\n const except = nextSelected\n ? normalized.except.filter((value) => value !== key)\n : [...normalized.except, key];\n return {selection: {...normalized, except}, added: nextSelected ? [key] : [], removed: nextSelected ? [] : [key]};\n }\n const ids = mode === 'single' && nextSelected\n ? [key]\n : nextSelected\n ? [...normalized.ids, key]\n : normalized.ids.filter((value) => value !== key);\n return {selection: {mode: 'ids', ids}, added: nextSelected ? [key] : [], removed: nextSelected ? [] : [key]};\n};\n\nconst reorderColumns = (columns: readonly DataGridColumn[], key: string, toIndex: number): DataGridColumn[] | null => {\n const from = columns.findIndex((column) => column.key === key);\n if (from < 0 || !columns[from]?.reorderable) return null;\n const region = columns[from]?.pinned ?? null;\n const regionIndexes = columns.flatMap((column, index) => column.pinned === region ? [index] : []);\n if (!regionIndexes.includes(toIndex)) return null;\n const next = [...columns];\n const [column] = next.splice(from, 1);\n if (!column) return null;\n next.splice(toIndex, 0, column);\n return next;\n};\n\nexport {\n columnTemplate,\n dataGridLayoutCss,\n isRowSelected,\n normalizeDataGridColumns,\n normalizeSelection,\n pinnedOffsets,\n reorderColumns,\n toggleSelection,\n};\nexport type {DataGridColumn, DataGridColumnDefaults, DataGridPinnedOffsets, SelectionChange};\n","import type Alpine from 'alpinejs';\n\nimport {\n createResizable,\n createVirtualWindowController,\n defineAlpineData,\n defineProps,\n fixedAxisWindowAdapter,\n parseVirtualizerFragmentResponse,\n reflectSchemaProp,\n replaceFragmentChildren,\n type FixedAxisWindow,\n type PropState,\n type ResizeEvent,\n type TrellisAlpineComponent,\n type VirtualScrollAlign,\n type VirtualWindowRequest,\n} from '@client/runtime';\nimport {dataGridSchema, type DataGridSelectionValue} from './contract';\nimport {\n columnTemplate,\n dataGridLayoutCss,\n isRowSelected,\n normalizeDataGridColumns,\n normalizeSelection,\n reorderColumns,\n toggleSelection,\n type DataGridColumn,\n} from './model';\n\ntype DataGridResetOptions = {scrollTop?: number};\ntype DataGridSetUrlOptions = {reset?: boolean};\n\n/** Public Alpine API for `ui.data-grid`. @public */\ninterface UiDataGridApi {\n reload(options?: DataGridResetOptions): void;\n reset(options?: DataGridResetOptions): void;\n scrollToIndex(index: number, align?: VirtualScrollAlign): void;\n setUrl(url: string, options?: DataGridSetUrlOptions): void;\n setTotalRows(count: number): void;\n resizeColumn(key: string, width: number): void;\n reorderColumn(key: string, toIndex: number): void;\n selectRow(key: string): void;\n deselectRow(key: string): void;\n toggleRow(key: string): void;\n setSelection(value: DataGridSelectionValue): void;\n selectQuery(token: string, total: number, except?: string[]): void;\n clearSelection(): void;\n}\n\ntype DataGridData = UiDataGridApi & {\n props: PropState<typeof dataGridSchema>;\n init(): void;\n destroy(): void;\n};\n\ntype BlockRecord = {key: string; element: HTMLElement};\n\nconst integer = (value: number, minimum = 0): number => (\n Math.max(minimum, Math.floor(Number.isFinite(value) ? value : minimum))\n);\n\nconst interactiveSelector = 'a,button,input,select,textarea,[contenteditable],[role=\"button\"],[role=\"link\"]';\n\nconst UiDataGrid = (AlpineInstance: Alpine.Alpine): TrellisAlpineComponent<DataGridData> => {\n let root: HTMLElement | null = null;\n let viewport: HTMLElement | null = null;\n let table: HTMLElement | null = null;\n let spacer: HTMLElement | null = null;\n let styleElement: HTMLStyleElement | null = null;\n let columns: DataGridColumn[] = [];\n let blocks: BlockRecord[] = [];\n let totalRows = 0;\n let selection: DataGridSelectionValue = {mode: 'ids', ids: []};\n let currentWindowKey = '';\n let latestScrollTop: number | null = null;\n let scrollFrame = 0;\n let loading = 0;\n let destroyed = false;\n let listenerAborter: AbortController | null = null;\n let suppressPropChange = false;\n const requestAborters = new Map<string, AbortController>();\n const resizeCleanups: Array<() => void> = [];\n const controller = createVirtualWindowController(fixedAxisWindowAdapter);\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 addClasses = (element: HTMLElement, value: string): void => {\n const names = value.split(/\\s+/).filter(Boolean);\n if (names.length) element.classList.add(...names);\n };\n const rows = (): HTMLElement[] => Array.from(root?.querySelectorAll<HTMLElement>('[data-ui-data-grid-row]') ?? []);\n const reflectMountedSelection = (): void => {\n rows().forEach((row) => {\n const key = row.dataset.rowKey ?? '';\n const selected = component.props.selection !== 'none' && key !== '' && isRowSelected(selection, key);\n row.toggleAttribute('data-selected', selected);\n if (component.props.selection === 'none') row.removeAttribute('aria-selected');\n else row.setAttribute('aria-selected', String(selected));\n });\n };\n const syncColumnLayout = (): void => {\n if (!root || !styleElement) return;\n root.style.setProperty('--ui-data-grid-template', columnTemplate(columns));\n const scope = root.dataset.uiDataGridScope ?? '';\n styleElement.textContent = dataGridLayoutCss(scope, columns);\n table?.setAttribute('aria-colcount', String(columns.length));\n const headerRow = root.querySelector<HTMLElement>('[data-ui-data-grid-header-row]');\n columns.forEach((column) => headerRow?.append(column.element));\n const indicator = headerRow?.querySelector<HTMLElement>('[data-ui-data-grid-column-indicator]');\n if (indicator) headerRow?.append(indicator);\n rows().forEach((row) => {\n const cells = new Map(Array.from(row.children).flatMap((element) => (\n element instanceof HTMLElement && element.hasAttribute('data-ui-data-grid-cell')\n ? [[element.dataset.column ?? '', element] as const]\n : []\n )));\n columns.forEach(({key}) => {\n const cell = cells.get(key);\n if (cell) row.append(cell);\n });\n });\n columns.forEach((column, index) => {\n column.element.setAttribute('aria-colindex', String(index + 1));\n column.element.dataset.pinned = column.pinned ?? '';\n column.element.toggleAttribute('data-pinned', column.pinned !== null);\n });\n rows().forEach((row) => addClasses(row, component.props.rowClass));\n root.querySelectorAll<HTMLElement>('[data-ui-data-grid-cell]').forEach((cell) => {\n const index = columns.findIndex(({key}) => key === cell.dataset.column);\n if (index >= 0) {\n const column = columns[index]!;\n cell.setAttribute('aria-colindex', String(index + 1));\n addClasses(cell, component.props.cellClass);\n addClasses(cell, column.cellClass);\n if (column.pinned) cell.dataset.pinned = column.pinned;\n else cell.removeAttribute('data-pinned');\n }\n });\n };\n const syncState = (): void => {\n if (!root || !spacer) return;\n root.toggleAttribute('data-loading', loading > 0);\n root.toggleAttribute('data-empty', totalRows === 0);\n root.dataset.selection = component.props.selection;\n table?.setAttribute('aria-rowcount', String(totalRows + 1));\n root.style.setProperty('--ui-data-grid-row-height', `${component.props.rowHeight}px`);\n root.style.setProperty('--ui-data-grid-total-height', `${Math.max(totalRows * component.props.rowHeight, component.props.rowHeight)}px`);\n spacer.style.height = `var(--ui-data-grid-total-height)`;\n reflectMountedSelection();\n };\n const updateTotal = (next: number): void => {\n const normalized = integer(next);\n if (normalized === totalRows) return;\n totalRows = normalized;\n syncState();\n dispatch('ui:data-grid-total-change', {totalRows});\n };\n const blockWindow = (start: number): FixedAxisWindow => fixedAxisWindowAdapter.compute({axes: {y: {\n total: totalRows,\n itemSize: component.props.rowHeight,\n viewportSize: component.props.bufferSize * component.props.rowHeight,\n scrollOffset: start * component.props.rowHeight,\n buffer: 0,\n }}});\n const desiredWindows = (scrollTop: number): FixedAxisWindow[] => {\n if (totalRows === 0) return [];\n const size = integer(component.props.bufferSize, 1);\n const index = Math.min(totalRows - 1, Math.floor(Math.max(0, scrollTop) / component.props.rowHeight));\n const center = Math.floor(index / size) * size;\n const last = Math.floor((totalRows - 1) / size) * size;\n const starts = [center - size, center, center + size].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('Data Grid requires a vertical virtual 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 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 requestAborters.set(block.key, aborter);\n loading += 1;\n syncState();\n root?.removeAttribute('data-error');\n dispatch('ui:data-grid-load-start', {window});\n try {\n const requestId = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${request.requestGeneration}`;\n const response = await fetch(requestUrl(window), {method: 'GET', headers: {\n Accept: 'text/html',\n 'X-Trellis-Virtualizer': 'true',\n 'X-Trellis-Request-ID': requestId,\n }, signal: aborter.signal});\n if (!response.ok && response.status !== 204) {\n controller.fail(request);\n root?.setAttribute('data-error', '');\n dispatch('ui:data-grid-error', {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 replaceFragmentChildren(AlpineInstance, block.element, payload.html, {\n assets: payload.assets,\n shouldReplace: () => controller.pending(block.key) === request && !destroyed,\n });\n if (!replaced) return;\n if (payload.totalItems !== null) updateTotal(payload.totalItems);\n if (!controller.commit(request, window)) return;\n block.element.style.height = `${axis.count * component.props.rowHeight}px`;\n block.element.style.transform = `translateY(${axis.translateOffset}px)`;\n syncColumnLayout();\n reflectMountedSelection();\n dispatch('ui:data-grid-load', {window, start: axis.start, count: axis.count, end: axis.start + axis.count});\n } catch (error) {\n if (aborter.signal.aborted) return;\n controller.fail(request);\n root?.setAttribute('data-error', '');\n dispatch('ui:data-grid-error', {window, status: 0, error});\n } finally {\n if (requestAborters.get(block.key) === aborter) requestAborters.delete(block.key);\n settle();\n }\n };\n const reconcile = (scrollTop: number): void => {\n if (loading > 0) {\n latestScrollTop = scrollTop;\n return;\n }\n const desired = desiredWindows(scrollTop);\n const logicalIndex = Math.min(Math.max(0, totalRows - 1), Math.floor(Math.max(0, scrollTop) / component.props.rowHeight));\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:data-grid-range', {start: axis.start, count: axis.count, end: axis.start + axis.count, window: center});\n }\n if (desired.length === 0) {\n blocks.forEach((block) => void replaceFragmentChildren(AlpineInstance, block.element, ''));\n return;\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 requestAborters.forEach((aborter) => aborter.abort());\n requestAborters.clear();\n loading = 0;\n latestScrollTop = null;\n currentWindowKey = '';\n controller.invalidate();\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 const setSelection = (value: DataGridSelectionValue, detail?: {added: string[]; removed: string[]}): void => {\n selection = normalizeSelection(value, component.props.selection);\n suppressPropChange = true;\n component.props.selectionValue = selection;\n if (root) reflectSchemaProp({el: root, schema: dataGridSchema, key: 'selectionValue', value: selection});\n suppressPropChange = false;\n reflectMountedSelection();\n dispatch('ui:data-grid-selection-change', {selection, added: detail?.added ?? [], removed: detail?.removed ?? []});\n };\n const changeRow = (key: string, selected?: boolean): void => {\n const change = toggleSelection(selection, String(key), component.props.selection, selected);\n if (change.added.length === 0 && change.removed.length === 0) return;\n setSelection(change.selection, change);\n };\n const updateColumnWidth = (column: DataGridColumn, width: number, phase: 'start' | 'resize' | 'end'): void => {\n column.width = Math.min(column.maxWidth ?? Number.POSITIVE_INFINITY, Math.max(column.minWidth, width));\n syncColumnLayout();\n dispatch('ui:data-grid-column-resize', {column: column.key, width: column.width, phase});\n };\n const registerResizeHandles = (): void => {\n resizeCleanups.splice(0).forEach((cleanup) => cleanup());\n columns.forEach((column) => {\n const handle = column.element.querySelector<HTMLElement>('[data-ui-data-grid-resize-handle]');\n if (!handle) return;\n const enabled = column.resizable && component.props.resizableColumns;\n if (enabled) handle.removeAttribute('aria-disabled');\n else handle.setAttribute('aria-disabled', 'true');\n handle.tabIndex = enabled ? 0 : -1;\n if (!enabled) return;\n const onResize = (event: ResizeEvent): void => updateColumnWidth(column, event.previewWidth, event.phase);\n resizeCleanups.push(createResizable({\n element: column.element,\n handle,\n axis: 'x',\n min: column.minWidth,\n max: column.maxWidth,\n mode: component.props.resizeMode,\n disabled: () => !component.props.resizableColumns || !column.resizable,\n onStart: onResize,\n onResize,\n onEnd: onResize,\n }));\n });\n };\n\n const component: TrellisAlpineComponent<DataGridData> = {\n props: null as unknown as PropState<typeof dataGridSchema>,\n init(): void {\n root = this.$el;\n destroyed = false;\n const scope = globalThis.crypto?.randomUUID?.() ?? `grid-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n root.dataset.uiDataGridScope = scope;\n root.querySelector<HTMLElement>('[data-ui-data-grid-header-row]')?.setAttribute('data-sortable-scope', scope);\n this.props = defineProps({el: root, schema: dataGridSchema, onChange: (_state, changes) => {\n if (suppressPropChange) return;\n const keys = changes.map(({key}) => key);\n if (keys.includes('selectionValue') || keys.includes('selection')) {\n selection = normalizeSelection(this.props.selectionValue, this.props.selection);\n reflectMountedSelection();\n }\n if (keys.includes('resizableColumns')) registerResizeHandles();\n if (keys.includes('totalRows')) {\n updateTotal(this.props.totalRows);\n this.reload();\n } else if (keys.some((key) => ['fetchUrl', 'rowHeight', 'bufferSize'].includes(key))) this.reload();\n }});\n totalRows = integer(this.props.totalRows);\n selection = normalizeSelection(this.props.selectionValue, this.props.selection);\n viewport = root.querySelector<HTMLElement>('[data-ui-data-grid-viewport]')\n ?? root.querySelector<HTMLElement>('[data-ui-scroll-area-viewport]');\n table = root.querySelector<HTMLElement>('[data-ui-data-grid-inner]');\n spacer = root.querySelector<HTMLElement>('[data-ui-data-grid-spacer]');\n styleElement = root.querySelector<HTMLStyleElement>('style[data-ui-data-grid-layout]');\n blocks = Array.from(root.querySelectorAll<HTMLElement>('[data-ui-data-grid-block]')).slice(0, 3)\n .map((element, index) => ({element, key: `block-${index + 1}`}));\n if (!viewport || !table || !spacer || !styleElement || blocks.length !== 3) {\n throw new Error('Data Grid requires one viewport, table owner, spacer, layout style, and three row blocks.');\n }\n viewport.setAttribute('data-ui-data-grid-viewport', '');\n columns = normalizeDataGridColumns(\n Array.from(root.querySelectorAll<HTMLElement>('[data-ui-data-grid-column-header]')),\n {width: this.props.defaultColumnWidth, minWidth: this.props.minColumnWidth,\n maxWidth: this.props.maxColumnWidth, resizable: this.props.resizableColumns,\n reorderable: this.props.reorderableColumns},\n );\n syncColumnLayout();\n registerResizeHandles();\n listenerAborter = new AbortController();\n viewport.addEventListener('scroll', () => {\n if (scrollFrame) return;\n scrollFrame = requestAnimationFrame(() => {\n scrollFrame = 0;\n if (viewport) reconcile(viewport.scrollTop);\n });\n }, {passive: true, signal: listenerAborter.signal});\n root.addEventListener('click', (event) => {\n const target = event.target as HTMLElement;\n const sortButton = target.closest<HTMLElement>('[data-ui-data-grid-sort-button]');\n if (sortButton && this.props.sortableColumns) {\n const header = sortButton.closest<HTMLElement>('[data-ui-data-grid-column-header]');\n const column = columns.find(({key}) => key === header?.dataset.column);\n if (column?.sortable) {\n const direction = column.sort === 'ascending' ? 'descending' : 'ascending';\n dispatch('ui:data-grid-sort', {column: column.key, direction, additive: event.shiftKey});\n }\n return;\n }\n const row = target.closest<HTMLElement>('[data-ui-data-grid-row]');\n if (!row || !root?.contains(row)) return;\n const key = row.dataset.rowKey ?? '';\n if (this.props.selectOnRowClick && !target.closest(interactiveSelector)) changeRow(key);\n dispatch('ui:data-grid-row-activate', {rowKey: key, row});\n }, {signal: listenerAborter.signal});\n root.addEventListener('dblclick', (event) => {\n const cell = (event.target as HTMLElement).closest<HTMLElement>('[data-ui-data-grid-cell]');\n const row = cell?.closest<HTMLElement>('[data-ui-data-grid-row]');\n if (cell && row) dispatch('ui:data-grid-cell-activate', {\n rowKey: row.dataset.rowKey ?? '', column: cell.dataset.column ?? '', cell,\n });\n }, {signal: listenerAborter.signal});\n root.addEventListener('ui:sortable-drop', ((event: CustomEvent) => {\n const source = event.detail?.source;\n if (source?.type !== 'data-grid-column') return;\n const to = Number(event.detail?.index ?? event.detail?.anchor?.index);\n if (Number.isInteger(to)) this.reorderColumn(String(source.id), to);\n }) as EventListener, {signal: listenerAborter.signal});\n viewport.style.overscrollBehavior = 'contain';\n viewport.style.overflowAnchor = 'none';\n viewport.scrollTop = fixedAxisWindowAdapter.scrollTo({\n total: totalRows, itemSize: this.props.rowHeight, viewportSize: viewport.clientHeight,\n scrollOffset: 0, buffer: this.props.bufferSize,\n }, {axis: 'y', index: this.props.initialIndex});\n syncState();\n reconcile(viewport.scrollTop);\n },\n destroy(): void {\n destroyed = true;\n if (scrollFrame) cancelAnimationFrame(scrollFrame);\n listenerAborter?.abort();\n listenerAborter = null;\n resizeCleanups.splice(0).forEach((cleanup) => cleanup());\n invalidate();\n this.props.disconnect();\n root = null;\n viewport = null;\n table = null;\n spacer = null;\n styleElement = null;\n columns = [];\n blocks = [];\n },\n scrollToIndex(index, align = 'start'): void {\n if (!viewport) return;\n viewport.scrollTop = fixedAxisWindowAdapter.scrollTo({\n total: totalRows, itemSize: this.props.rowHeight, viewportSize: viewport.clientHeight,\n scrollOffset: viewport.scrollTop, buffer: this.props.bufferSize,\n }, {axis: 'y', index, align});\n reconcile(viewport.scrollTop);\n },\n setTotalRows(count): void {\n updateTotal(count);\n this.reload({scrollTop: viewport?.scrollTop ?? 0});\n },\n setUrl(url, options = {}): void {\n suppressPropChange = true;\n this.props.fetchUrl = String(url);\n if (root) reflectSchemaProp({el: root, schema: dataGridSchema, key: 'fetchUrl', value: String(url)});\n suppressPropChange = false;\n if (options.reset ?? true) this.reset();\n else this.reload();\n },\n reset(options = {}): void { this.reload({scrollTop: options.scrollTop ?? 0}); },\n reload(options = {}): void {\n const scrollTop = options.scrollTop ?? viewport?.scrollTop ?? 0;\n invalidate();\n if (viewport) viewport.scrollTop = Math.max(0, scrollTop);\n reconcile(scrollTop);\n },\n resizeColumn(key, width): void {\n const column = columns.find((candidate) => candidate.key === key);\n if (column) updateColumnWidth(column, Number(width), 'end');\n },\n reorderColumn(key, toIndex): void {\n const from = columns.findIndex((column) => column.key === key);\n const next = reorderColumns(columns, key, integer(toIndex));\n if (!next) return;\n columns = next;\n syncColumnLayout();\n dispatch('ui:data-grid-column-reorder', {column: key, from, to: integer(toIndex), columns: columns.map(({key: columnKey}) => columnKey)});\n },\n selectRow(key): void { changeRow(String(key), true); },\n deselectRow(key): void { changeRow(String(key), false); },\n toggleRow(key): void { changeRow(String(key)); },\n setSelection(value): void { setSelection(value); },\n selectQuery(token, total, except = []): void {\n setSelection({mode: 'query', token: String(token), total: integer(total), except: except.map(String)});\n },\n clearSelection(): void { setSelection({mode: 'ids', ids: []}); },\n };\n return component;\n};\n\nconst registerDataGrid = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiDataGrid', () => UiDataGrid(AlpineInstance))(AlpineInstance);\n};\n\nexport {registerDataGrid, UiDataGrid};\nexport type {DataGridData, DataGridResetOptions, DataGridSetUrlOptions, UiDataGridApi};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\nimport {registerResizableCapability} from '../../capabilities/resizable';\nimport {registerMotionCapability} from '../../capabilities/motion';\nimport {registerSortableCapability} from '../../capabilities/sortable';\nimport {registerDataGrid as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerDataGrid = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerResizableCapability(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerSortableCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerDataGrid};\nexport default registerDataGrid;\nexport * from './index';\n"],"mappings":"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"}
1
+ {"version":3,"file":"entry.generated-BUbxiHwA.js","names":[],"sources":["../../../../../../../../client/src/components/data-grid/contract.ts","../../../../../../../../client/src/components/data-grid/model.ts","../../../../../../../../client/src/components/data-grid/index.ts","../../../../../../../../client/src/components/data-grid/entry.generated.ts"],"sourcesContent":["import {bool, json, number, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {INTERACTION_TREATMENTS, SELECTION_COLORS} from '../common';\n\nconst DATA_GRID_SELECTIONS = ['none', 'single', 'multiple'] as const;\nconst DATA_GRID_DENSITIES = ['compact', 'default', 'comfortable'] as const;\nconst DATA_GRID_BORDERS = ['none', 'row', 'grid'] as const;\nconst DATA_GRID_RESIZE_MODES = ['onChange', 'onEnd'] as const;\nconst DATA_GRID_PINS = ['', 'left', 'right'] as const;\nconst DATA_GRID_SORTS = ['none', 'ascending', 'descending', 'other'] as const;\nconst DATA_GRID_ALIGNS = ['start', 'center', 'end'] as const;\n\ntype DataGridSelectionValue =\n | {mode: 'ids'; ids: string[]}\n | {mode: 'query'; token: string; total: number; except: string[]};\n\nconst dataGridSchema = {\n fetchUrl: string,\n totalRows: number.min(0).default(0),\n rowHeight: number.min(Number.EPSILON).default(36),\n bufferSize: number.min(1).default(50),\n overscan: number.min(0).default(0),\n initialIndex: number.min(0).default(0),\n startParam: string.default('start'),\n countParam: string.default('count'),\n totalParam: string.default('total'),\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 selection: oneOf(DATA_GRID_SELECTIONS, 'none'),\n selectionValue: json<DataGridSelectionValue>({mode: 'ids', ids: []}),\n selectOnRowClick: bool,\n rowKey: string.default('id'),\n stickyHeader: bool.default(true),\n resizableColumns: bool.default(true),\n reorderableColumns: bool.default(true),\n sortableColumns: bool.default(true),\n minColumnWidth: number.min(0).default(60),\n defaultColumnWidth: number.min(Number.EPSILON).default(180),\n maxColumnWidth: json<number | null>(null),\n resizeMode: oneOf(DATA_GRID_RESIZE_MODES, 'onChange'),\n color: oneOf(SELECTION_COLORS, 'neutral'),\n interaction: oneOf(INTERACTION_TREATMENTS, 'edge'),\n dragPreviewPosition: string.trim.default('preserve'),\n density: oneOf(DATA_GRID_DENSITIES, 'default'),\n border: oneOf(DATA_GRID_BORDERS, 'row'),\n empty: string.default('No rows found.'),\n class: string,\n controlsClass: string,\n viewportClass: string,\n headerClass: string,\n rowClass: string,\n cellClass: string,\n footerClass: string,\n emptyClass: string,\n};\n\nconst dataGridColumnSchema = {\n key: string,\n label: string,\n width: number.min(Number.EPSILON).default(180),\n minWidth: number.min(0).default(60),\n maxWidth: json<number | null>(null),\n hidden: bool,\n pinned: oneOf(DATA_GRID_PINS, ''),\n sortable: bool,\n sort: oneOf(DATA_GRID_SORTS, 'none'),\n resizable: bool.default(true),\n reorderable: bool.default(true),\n align: oneOf(DATA_GRID_ALIGNS, 'start'),\n class: string,\n headerClass: string,\n labelClass: string,\n resizeHandleClass: string,\n};\n\nconst dataGridRowsSchema = {\n rows: json<unknown[]>([]),\n columns: json<Array<Record<string, unknown>>>([]),\n startIndex: number.min(0).default(0),\n rowKey: string.default('id'),\n rowComponent: string.default('ui.data-grid.row'),\n cellComponent: string.default('ui.data-grid.cell'),\n class: string,\n};\nconst dataGridRowSchema = {key: string, index: number.min(0).default(0), class: string};\nconst dataGridCellSchema = {column: string, index: number.min(1).default(1), align: oneOf(DATA_GRID_ALIGNS, 'start'), class: string};\nconst dataGridEmptySchema = {class: string};\n\ntype DataGridProps = SchemaToProps<typeof dataGridSchema>;\ntype DataGridColumnProps = SchemaToProps<typeof dataGridColumnSchema>;\ntype DataGridRowsProps = SchemaToProps<typeof dataGridRowsSchema>;\ntype DataGridSelection = typeof DATA_GRID_SELECTIONS[number];\ntype DataGridPin = Exclude<typeof DATA_GRID_PINS[number], ''> | null;\ntype DataGridSort = typeof DATA_GRID_SORTS[number];\ntype DataGridAlign = typeof DATA_GRID_ALIGNS[number];\n\nexport {\n DATA_GRID_ALIGNS,\n DATA_GRID_BORDERS,\n DATA_GRID_DENSITIES,\n DATA_GRID_PINS,\n DATA_GRID_RESIZE_MODES,\n DATA_GRID_SELECTIONS,\n DATA_GRID_SORTS,\n dataGridCellSchema,\n dataGridColumnSchema,\n dataGridEmptySchema,\n dataGridRowSchema,\n dataGridRowsSchema,\n dataGridSchema,\n};\nexport type {\n DataGridAlign,\n DataGridColumnProps,\n DataGridPin,\n DataGridProps,\n DataGridRowsProps,\n DataGridSelection,\n DataGridSelectionValue,\n DataGridSort,\n};\n","import type {DataGridAlign, DataGridPin, DataGridSelection, DataGridSelectionValue, DataGridSort} from './contract';\n\ntype DataGridColumn = {\n key: string;\n label: string;\n width: number;\n minWidth: number;\n maxWidth: number | null;\n hidden: boolean;\n pinned: DataGridPin;\n sortable: boolean;\n sort: DataGridSort;\n resizable: boolean;\n reorderable: boolean;\n align: DataGridAlign;\n cellClass: string;\n element: HTMLElement;\n};\n\ntype DataGridColumnDefaults = {\n width: number;\n minWidth: number;\n maxWidth: number | null;\n resizable: boolean;\n reorderable: boolean;\n};\n\ntype DataGridPinnedOffsets = {left: Map<string, number>; right: Map<string, number>};\ntype SelectionChange = {selection: DataGridSelectionValue; added: string[]; removed: string[]};\n\nconst numberAttribute = (element: HTMLElement, name: string, fallback: number): number => {\n const raw = element.getAttribute(name);\n if (raw === null || raw.trim() === '') return fallback;\n const value = Number(raw);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst optionalNumberAttribute = (element: HTMLElement, name: string, fallback: number | null): number | null => {\n const raw = element.getAttribute(name);\n if (raw === null || raw.trim() === '') return fallback;\n const value = Number(raw);\n return Number.isFinite(value) && value > 0 ? value : null;\n};\n\nconst boolAttribute = (element: HTMLElement, name: string, fallback: boolean): boolean => {\n if (!element.hasAttribute(name)) return fallback;\n const raw = element.getAttribute(name) ?? '';\n return raw === '' || ['true', '1', 'yes', 'on'].includes(raw.toLowerCase());\n};\n\nconst normalizeDataGridColumns = (\n elements: readonly HTMLElement[],\n defaults: DataGridColumnDefaults,\n): DataGridColumn[] => {\n const seen = new Set<string>();\n return elements.flatMap((element) => {\n const key = (element.dataset.column ?? '').trim();\n if (!key) throw new Error('Data Grid columns require a non-empty key.');\n if (element.hasAttribute('data-hidden')) return [];\n if (seen.has(key)) throw new Error(`Data Grid column key \"${key}\" is duplicated.`);\n seen.add(key);\n const minWidth = Math.max(0, numberAttribute(element, 'data-min-width', defaults.minWidth));\n const maxWidth = optionalNumberAttribute(element, 'data-max-width', defaults.maxWidth);\n const unclamped = numberAttribute(element, 'data-width', defaults.width);\n const width = Math.min(maxWidth ?? Number.POSITIVE_INFINITY, Math.max(minWidth, unclamped));\n const pinned = element.dataset.pinned === 'left' || element.dataset.pinned === 'right'\n ? element.dataset.pinned\n : null;\n const sort = ['ascending', 'descending', 'other'].includes(element.dataset.sort ?? '')\n ? element.dataset.sort as DataGridSort\n : 'none';\n const align = ['center', 'end'].includes(element.dataset.align ?? '')\n ? element.dataset.align as DataGridAlign\n : 'start';\n return [{\n key,\n label: element.dataset.label ?? element.textContent?.trim() ?? key,\n width,\n minWidth,\n maxWidth,\n hidden: false,\n pinned,\n sortable: boolAttribute(element, 'data-sortable', false),\n sort,\n resizable: boolAttribute(element, 'data-resizable', defaults.resizable),\n reorderable: boolAttribute(element, 'data-reorderable', defaults.reorderable),\n align,\n cellClass: element.dataset.cellClass ?? '',\n element,\n }];\n });\n};\n\nconst columnTemplate = (columns: readonly DataGridColumn[]): string => (\n columns.map(({width}) => `${width}px`).join(' ')\n);\n\nconst pinnedOffsets = (columns: readonly DataGridColumn[]): DataGridPinnedOffsets => {\n const left = new Map<string, number>();\n const right = new Map<string, number>();\n let offset = 0;\n columns.forEach((column) => {\n if (column.pinned !== 'left') return;\n left.set(column.key, offset);\n offset += column.width;\n });\n offset = 0;\n [...columns].reverse().forEach((column) => {\n if (column.pinned !== 'right') return;\n right.set(column.key, offset);\n offset += column.width;\n });\n return {left, right};\n};\n\nconst cssEscape = (value: string): string => (\n globalThis.CSS?.escape ? globalThis.CSS.escape(value) : value.replace(/[^a-zA-Z0-9_-]/g, (character) => `\\\\${character}`)\n);\n\nconst dataGridLayoutCss = (scope: string, columns: readonly DataGridColumn[]): string => {\n const offsets = pinnedOffsets(columns);\n return columns.map((column, index) => {\n const owner = `[data-ui-data-grid-scope=\"${cssEscape(scope)}\"]`;\n const columnSelector = `[data-column=\"${cssEscape(column.key)}\"]`;\n const selector = `${owner} [data-ui-data-grid-column-header]${columnSelector},${owner} [data-ui-data-grid-cell]${columnSelector}`;\n const pin = column.pinned === 'left'\n ? `position:sticky;left:${offsets.left.get(column.key) ?? 0}px;z-index:2;`\n : column.pinned === 'right'\n ? `position:sticky;right:${offsets.right.get(column.key) ?? 0}px;z-index:2;`\n : '';\n return `${selector}{grid-column:${index + 1};${pin}}`;\n }).join('');\n};\n\nconst normalizeSelection = (value: unknown, mode: DataGridSelection): DataGridSelectionValue => {\n if (mode === 'multiple' && typeof value === 'object' && value !== null && (value as {mode?: unknown}).mode === 'query') {\n const query = value as Partial<Extract<DataGridSelectionValue, {mode: 'query'}>>;\n if (typeof query.token === 'string' && Number.isFinite(query.total)) return {\n mode: 'query',\n token: query.token,\n total: Math.max(0, Math.floor(query.total ?? 0)),\n except: [...new Set(Array.isArray(query.except) ? query.except.filter((key): key is string => typeof key === 'string') : [])],\n };\n }\n const ids = typeof value === 'object' && value !== null && (value as {mode?: unknown}).mode === 'ids'\n && Array.isArray((value as {ids?: unknown}).ids)\n ? (value as {ids: unknown[]}).ids.filter((key): key is string => typeof key === 'string')\n : [];\n const unique = [...new Set(ids)];\n return {mode: 'ids', ids: mode === 'single' ? unique.slice(0, 1) : mode === 'none' ? [] : unique};\n};\n\nconst isRowSelected = (selection: DataGridSelectionValue, key: string): boolean => (\n selection.mode === 'query' ? !selection.except.includes(key) : selection.ids.includes(key)\n);\n\nconst toggleSelection = (\n current: DataGridSelectionValue,\n key: string,\n mode: DataGridSelection,\n selected?: boolean,\n): SelectionChange => {\n const normalized = normalizeSelection(current, mode);\n if (mode === 'none') return {selection: normalized, added: [], removed: []};\n const wasSelected = isRowSelected(normalized, key);\n const nextSelected = selected ?? !wasSelected;\n if (wasSelected === nextSelected) return {selection: normalized, added: [], removed: []};\n if (normalized.mode === 'query') {\n const except = nextSelected\n ? normalized.except.filter((value) => value !== key)\n : [...normalized.except, key];\n return {selection: {...normalized, except}, added: nextSelected ? [key] : [], removed: nextSelected ? [] : [key]};\n }\n const ids = mode === 'single' && nextSelected\n ? [key]\n : nextSelected\n ? [...normalized.ids, key]\n : normalized.ids.filter((value) => value !== key);\n return {selection: {mode: 'ids', ids}, added: nextSelected ? [key] : [], removed: nextSelected ? [] : [key]};\n};\n\nconst reorderColumns = (columns: readonly DataGridColumn[], key: string, toIndex: number): DataGridColumn[] | null => {\n const from = columns.findIndex((column) => column.key === key);\n if (from < 0 || !columns[from]?.reorderable) return null;\n const region = columns[from]?.pinned ?? null;\n const regionIndexes = columns.flatMap((column, index) => column.pinned === region ? [index] : []);\n if (!regionIndexes.includes(toIndex)) return null;\n const next = [...columns];\n const [column] = next.splice(from, 1);\n if (!column) return null;\n next.splice(toIndex, 0, column);\n return next;\n};\n\nexport {\n columnTemplate,\n dataGridLayoutCss,\n isRowSelected,\n normalizeDataGridColumns,\n normalizeSelection,\n pinnedOffsets,\n reorderColumns,\n toggleSelection,\n};\nexport type {DataGridColumn, DataGridColumnDefaults, DataGridPinnedOffsets, SelectionChange};\n","import type Alpine from 'alpinejs';\n\nimport {\n createResizable,\n createVirtualWindowController,\n defineAlpineData,\n defineProps,\n fixedAxisWindowAdapter,\n parseVirtualizerFragmentResponse,\n reflectSchemaProp,\n replaceFragmentChildren,\n type FixedAxisWindow,\n type PropState,\n type ResizeEvent,\n type TrellisAlpineComponent,\n type VirtualScrollAlign,\n type VirtualWindowRequest,\n} from '@client/runtime';\nimport {dataGridSchema, type DataGridSelectionValue} from './contract';\nimport {\n columnTemplate,\n dataGridLayoutCss,\n isRowSelected,\n normalizeDataGridColumns,\n normalizeSelection,\n reorderColumns,\n toggleSelection,\n type DataGridColumn,\n} from './model';\n\ntype DataGridResetOptions = {scrollTop?: number};\ntype DataGridSetUrlOptions = {reset?: boolean};\n\n/** Public Alpine API for `ui.data-grid`. @public */\ninterface UiDataGridApi {\n reload(options?: DataGridResetOptions): void;\n reset(options?: DataGridResetOptions): void;\n scrollToIndex(index: number, align?: VirtualScrollAlign): void;\n setUrl(url: string, options?: DataGridSetUrlOptions): void;\n setTotalRows(count: number): void;\n resizeColumn(key: string, width: number): void;\n reorderColumn(key: string, toIndex: number): void;\n selectRow(key: string): void;\n deselectRow(key: string): void;\n toggleRow(key: string): void;\n setSelection(value: DataGridSelectionValue): void;\n selectQuery(token: string, total: number, except?: string[]): void;\n clearSelection(): void;\n}\n\ntype DataGridData = UiDataGridApi & {\n props: PropState<typeof dataGridSchema>;\n init(): void;\n destroy(): void;\n};\n\ntype BlockRecord = {key: string; element: HTMLElement};\n\nconst integer = (value: number, minimum = 0): number => (\n Math.max(minimum, Math.floor(Number.isFinite(value) ? value : minimum))\n);\n\nconst interactiveSelector = 'a,button,input,select,textarea,[contenteditable],[role=\"button\"],[role=\"link\"]';\n\nconst UiDataGrid = (AlpineInstance: Alpine.Alpine): TrellisAlpineComponent<DataGridData> => {\n let root: HTMLElement | null = null;\n let viewport: HTMLElement | null = null;\n let table: HTMLElement | null = null;\n let spacer: HTMLElement | null = null;\n let styleElement: HTMLStyleElement | null = null;\n let columns: DataGridColumn[] = [];\n let blocks: BlockRecord[] = [];\n let totalRows = 0;\n let selection: DataGridSelectionValue = {mode: 'ids', ids: []};\n let currentWindowKey = '';\n let latestScrollTop: number | null = null;\n let scrollFrame = 0;\n let loading = 0;\n let destroyed = false;\n let listenerAborter: AbortController | null = null;\n let suppressPropChange = false;\n const requestAborters = new Map<string, AbortController>();\n const resizeCleanups: Array<() => void> = [];\n const controller = createVirtualWindowController(fixedAxisWindowAdapter);\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 addClasses = (element: HTMLElement, value: string): void => {\n const names = value.split(/\\s+/).filter(Boolean);\n if (names.length) element.classList.add(...names);\n };\n const rows = (): HTMLElement[] => Array.from(root?.querySelectorAll<HTMLElement>('[data-ui-data-grid-row]') ?? []);\n const reflectMountedSelection = (): void => {\n rows().forEach((row) => {\n const key = row.dataset.rowKey ?? '';\n const selected = component.props.selection !== 'none' && key !== '' && isRowSelected(selection, key);\n row.toggleAttribute('data-selected', selected);\n if (component.props.selection === 'none') row.removeAttribute('aria-selected');\n else row.setAttribute('aria-selected', String(selected));\n });\n };\n const syncColumnLayout = (): void => {\n if (!root || !styleElement) return;\n root.style.setProperty('--ui-data-grid-template', columnTemplate(columns));\n const scope = root.dataset.uiDataGridScope ?? '';\n styleElement.textContent = dataGridLayoutCss(scope, columns);\n table?.setAttribute('aria-colcount', String(columns.length));\n const headerRow = root.querySelector<HTMLElement>('[data-ui-data-grid-header-row]');\n columns.forEach((column) => headerRow?.append(column.element));\n const indicator = headerRow?.querySelector<HTMLElement>('[data-ui-data-grid-column-indicator]');\n if (indicator) headerRow?.append(indicator);\n rows().forEach((row) => {\n const cells = new Map(Array.from(row.children).flatMap((element) => (\n element instanceof HTMLElement && element.hasAttribute('data-ui-data-grid-cell')\n ? [[element.dataset.column ?? '', element] as const]\n : []\n )));\n columns.forEach(({key}) => {\n const cell = cells.get(key);\n if (cell) row.append(cell);\n });\n });\n columns.forEach((column, index) => {\n column.element.setAttribute('aria-colindex', String(index + 1));\n column.element.dataset.pinned = column.pinned ?? '';\n column.element.toggleAttribute('data-pinned', column.pinned !== null);\n });\n rows().forEach((row) => addClasses(row, component.props.rowClass));\n root.querySelectorAll<HTMLElement>('[data-ui-data-grid-cell]').forEach((cell) => {\n const index = columns.findIndex(({key}) => key === cell.dataset.column);\n if (index >= 0) {\n const column = columns[index]!;\n cell.setAttribute('aria-colindex', String(index + 1));\n addClasses(cell, component.props.cellClass);\n addClasses(cell, column.cellClass);\n if (column.pinned) cell.dataset.pinned = column.pinned;\n else cell.removeAttribute('data-pinned');\n }\n });\n };\n const syncState = (): void => {\n if (!root || !spacer) return;\n root.toggleAttribute('data-loading', loading > 0);\n root.toggleAttribute('data-empty', totalRows === 0);\n root.dataset.selection = component.props.selection;\n table?.setAttribute('aria-rowcount', String(totalRows + 1));\n root.style.setProperty('--ui-data-grid-row-height', `${component.props.rowHeight}px`);\n root.style.setProperty('--ui-data-grid-total-height', `${Math.max(totalRows * component.props.rowHeight, component.props.rowHeight)}px`);\n spacer.style.height = `var(--ui-data-grid-total-height)`;\n reflectMountedSelection();\n };\n const updateTotal = (next: number): void => {\n const normalized = integer(next);\n if (normalized === totalRows) return;\n totalRows = normalized;\n syncState();\n dispatch('ui:data-grid-total-change', {totalRows});\n };\n const blockWindow = (start: number): FixedAxisWindow => fixedAxisWindowAdapter.compute({axes: {y: {\n total: totalRows,\n itemSize: component.props.rowHeight,\n viewportSize: component.props.bufferSize * component.props.rowHeight,\n scrollOffset: start * component.props.rowHeight,\n buffer: 0,\n }}});\n const desiredWindows = (scrollTop: number): FixedAxisWindow[] => {\n if (totalRows === 0) return [];\n const size = integer(component.props.bufferSize, 1);\n const index = Math.min(totalRows - 1, Math.floor(Math.max(0, scrollTop) / component.props.rowHeight));\n const center = Math.floor(index / size) * size;\n const last = Math.floor((totalRows - 1) / size) * size;\n const starts = [center - size, center, center + size].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('Data Grid requires a vertical virtual 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 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 requestAborters.set(block.key, aborter);\n loading += 1;\n syncState();\n root?.removeAttribute('data-error');\n dispatch('ui:data-grid-load-start', {window});\n try {\n const requestId = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${request.requestGeneration}`;\n const response = await fetch(requestUrl(window), {method: 'GET', headers: {\n Accept: 'text/html',\n 'X-Trellis-Virtualizer': 'true',\n 'X-Trellis-Request-ID': requestId,\n }, signal: aborter.signal});\n if (!response.ok && response.status !== 204) {\n controller.fail(request);\n root?.setAttribute('data-error', '');\n dispatch('ui:data-grid-error', {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 replaceFragmentChildren(AlpineInstance, block.element, payload.html, {\n assets: payload.assets,\n shouldReplace: () => controller.pending(block.key) === request && !destroyed,\n });\n if (!replaced) return;\n if (payload.totalItems !== null) updateTotal(payload.totalItems);\n if (!controller.commit(request, window)) return;\n block.element.style.height = `${axis.count * component.props.rowHeight}px`;\n block.element.style.transform = `translateY(${axis.translateOffset}px)`;\n syncColumnLayout();\n reflectMountedSelection();\n dispatch('ui:data-grid-load', {window, start: axis.start, count: axis.count, end: axis.start + axis.count});\n } catch (error) {\n if (aborter.signal.aborted) return;\n controller.fail(request);\n root?.setAttribute('data-error', '');\n dispatch('ui:data-grid-error', {window, status: 0, error});\n } finally {\n if (requestAborters.get(block.key) === aborter) requestAborters.delete(block.key);\n settle();\n }\n };\n const reconcile = (scrollTop: number): void => {\n if (loading > 0) {\n latestScrollTop = scrollTop;\n return;\n }\n const desired = desiredWindows(scrollTop);\n const logicalIndex = Math.min(Math.max(0, totalRows - 1), Math.floor(Math.max(0, scrollTop) / component.props.rowHeight));\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:data-grid-range', {start: axis.start, count: axis.count, end: axis.start + axis.count, window: center});\n }\n if (desired.length === 0) {\n blocks.forEach((block) => void replaceFragmentChildren(AlpineInstance, block.element, ''));\n return;\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 requestAborters.forEach((aborter) => aborter.abort());\n requestAborters.clear();\n loading = 0;\n latestScrollTop = null;\n currentWindowKey = '';\n controller.invalidate();\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 const setSelection = (value: DataGridSelectionValue, detail?: {added: string[]; removed: string[]}): void => {\n selection = normalizeSelection(value, component.props.selection);\n suppressPropChange = true;\n component.props.selectionValue = selection;\n if (root) reflectSchemaProp({el: root, schema: dataGridSchema, key: 'selectionValue', value: selection});\n suppressPropChange = false;\n reflectMountedSelection();\n dispatch('ui:data-grid-selection-change', {selection, added: detail?.added ?? [], removed: detail?.removed ?? []});\n };\n const changeRow = (key: string, selected?: boolean): void => {\n const change = toggleSelection(selection, String(key), component.props.selection, selected);\n if (change.added.length === 0 && change.removed.length === 0) return;\n setSelection(change.selection, change);\n };\n const updateColumnWidth = (column: DataGridColumn, width: number, phase: 'start' | 'resize' | 'end'): void => {\n column.width = Math.min(column.maxWidth ?? Number.POSITIVE_INFINITY, Math.max(column.minWidth, width));\n syncColumnLayout();\n dispatch('ui:data-grid-column-resize', {column: column.key, width: column.width, phase});\n };\n const registerResizeHandles = (): void => {\n resizeCleanups.splice(0).forEach((cleanup) => cleanup());\n columns.forEach((column) => {\n const handle = column.element.querySelector<HTMLElement>('[data-ui-data-grid-resize-handle]');\n if (!handle) return;\n const enabled = column.resizable && component.props.resizableColumns;\n if (enabled) handle.removeAttribute('aria-disabled');\n else handle.setAttribute('aria-disabled', 'true');\n handle.tabIndex = enabled ? 0 : -1;\n if (!enabled) return;\n const onResize = (event: ResizeEvent): void => updateColumnWidth(column, event.previewWidth, event.phase);\n resizeCleanups.push(createResizable({\n element: column.element,\n handle,\n axis: 'x',\n min: column.minWidth,\n max: column.maxWidth,\n mode: component.props.resizeMode,\n disabled: () => !component.props.resizableColumns || !column.resizable,\n onStart: onResize,\n onResize,\n onEnd: onResize,\n }));\n });\n };\n\n const component: TrellisAlpineComponent<DataGridData> = {\n props: null as unknown as PropState<typeof dataGridSchema>,\n init(): void {\n root = this.$el;\n destroyed = false;\n const scope = globalThis.crypto?.randomUUID?.() ?? `grid-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n root.dataset.uiDataGridScope = scope;\n root.querySelector<HTMLElement>('[data-ui-data-grid-header-row]')?.setAttribute('data-sortable-scope', scope);\n this.props = defineProps({el: root, schema: dataGridSchema, onChange: (_state, changes) => {\n if (suppressPropChange) return;\n const keys = changes.map(({key}) => key);\n if (keys.includes('selectionValue') || keys.includes('selection')) {\n selection = normalizeSelection(this.props.selectionValue, this.props.selection);\n reflectMountedSelection();\n }\n if (keys.includes('resizableColumns')) registerResizeHandles();\n if (keys.includes('totalRows')) {\n updateTotal(this.props.totalRows);\n this.reload();\n } else if (keys.some((key) => ['fetchUrl', 'rowHeight', 'bufferSize'].includes(key))) this.reload();\n }});\n totalRows = integer(this.props.totalRows);\n selection = normalizeSelection(this.props.selectionValue, this.props.selection);\n viewport = root.querySelector<HTMLElement>('[data-ui-data-grid-viewport]')\n ?? root.querySelector<HTMLElement>('[data-ui-scroll-area-viewport]');\n table = root.querySelector<HTMLElement>('[data-ui-data-grid-inner]');\n spacer = root.querySelector<HTMLElement>('[data-ui-data-grid-spacer]');\n styleElement = root.querySelector<HTMLStyleElement>('style[data-ui-data-grid-layout]');\n blocks = Array.from(root.querySelectorAll<HTMLElement>('[data-ui-data-grid-block]')).slice(0, 3)\n .map((element, index) => ({element, key: `block-${index + 1}`}));\n if (!viewport || !table || !spacer || !styleElement || blocks.length !== 3) {\n throw new Error('Data Grid requires one viewport, table owner, spacer, layout style, and three row blocks.');\n }\n viewport.setAttribute('data-ui-data-grid-viewport', '');\n columns = normalizeDataGridColumns(\n Array.from(root.querySelectorAll<HTMLElement>('[data-ui-data-grid-column-header]')),\n {width: this.props.defaultColumnWidth, minWidth: this.props.minColumnWidth,\n maxWidth: this.props.maxColumnWidth, resizable: this.props.resizableColumns,\n reorderable: this.props.reorderableColumns},\n );\n syncColumnLayout();\n registerResizeHandles();\n listenerAborter = new AbortController();\n viewport.addEventListener('scroll', () => {\n if (scrollFrame) return;\n scrollFrame = requestAnimationFrame(() => {\n scrollFrame = 0;\n if (viewport) reconcile(viewport.scrollTop);\n });\n }, {passive: true, signal: listenerAborter.signal});\n root.addEventListener('click', (event) => {\n const target = event.target as HTMLElement;\n const sortButton = target.closest<HTMLElement>('[data-ui-data-grid-sort-button]');\n if (sortButton && this.props.sortableColumns) {\n const header = sortButton.closest<HTMLElement>('[data-ui-data-grid-column-header]');\n const column = columns.find(({key}) => key === header?.dataset.column);\n if (column?.sortable) {\n const direction = column.sort === 'ascending' ? 'descending' : 'ascending';\n dispatch('ui:data-grid-sort', {column: column.key, direction, additive: event.shiftKey});\n }\n return;\n }\n const row = target.closest<HTMLElement>('[data-ui-data-grid-row]');\n if (!row || !root?.contains(row)) return;\n const key = row.dataset.rowKey ?? '';\n if (this.props.selectOnRowClick && !target.closest(interactiveSelector)) changeRow(key);\n dispatch('ui:data-grid-row-activate', {rowKey: key, row});\n }, {signal: listenerAborter.signal});\n root.addEventListener('dblclick', (event) => {\n const cell = (event.target as HTMLElement).closest<HTMLElement>('[data-ui-data-grid-cell]');\n const row = cell?.closest<HTMLElement>('[data-ui-data-grid-row]');\n if (cell && row) dispatch('ui:data-grid-cell-activate', {\n rowKey: row.dataset.rowKey ?? '', column: cell.dataset.column ?? '', cell,\n });\n }, {signal: listenerAborter.signal});\n root.addEventListener('ui:sortable-drop', ((event: CustomEvent) => {\n const source = event.detail?.source;\n if (source?.type !== 'data-grid-column') return;\n const to = Number(event.detail?.index ?? event.detail?.anchor?.index);\n if (Number.isInteger(to)) this.reorderColumn(String(source.id), to);\n }) as EventListener, {signal: listenerAborter.signal});\n viewport.style.overscrollBehavior = 'contain';\n viewport.style.overflowAnchor = 'none';\n viewport.scrollTop = fixedAxisWindowAdapter.scrollTo({\n total: totalRows, itemSize: this.props.rowHeight, viewportSize: viewport.clientHeight,\n scrollOffset: 0, buffer: this.props.bufferSize,\n }, {axis: 'y', index: this.props.initialIndex});\n syncState();\n reconcile(viewport.scrollTop);\n },\n destroy(): void {\n destroyed = true;\n if (scrollFrame) cancelAnimationFrame(scrollFrame);\n listenerAborter?.abort();\n listenerAborter = null;\n resizeCleanups.splice(0).forEach((cleanup) => cleanup());\n invalidate();\n this.props.disconnect();\n root = null;\n viewport = null;\n table = null;\n spacer = null;\n styleElement = null;\n columns = [];\n blocks = [];\n },\n scrollToIndex(index, align = 'start'): void {\n if (!viewport) return;\n viewport.scrollTop = fixedAxisWindowAdapter.scrollTo({\n total: totalRows, itemSize: this.props.rowHeight, viewportSize: viewport.clientHeight,\n scrollOffset: viewport.scrollTop, buffer: this.props.bufferSize,\n }, {axis: 'y', index, align});\n reconcile(viewport.scrollTop);\n },\n setTotalRows(count): void {\n updateTotal(count);\n this.reload({scrollTop: viewport?.scrollTop ?? 0});\n },\n setUrl(url, options = {}): void {\n suppressPropChange = true;\n this.props.fetchUrl = String(url);\n if (root) reflectSchemaProp({el: root, schema: dataGridSchema, key: 'fetchUrl', value: String(url)});\n suppressPropChange = false;\n if (options.reset ?? true) this.reset();\n else this.reload();\n },\n reset(options = {}): void { this.reload({scrollTop: options.scrollTop ?? 0}); },\n reload(options = {}): void {\n const scrollTop = options.scrollTop ?? viewport?.scrollTop ?? 0;\n invalidate();\n if (viewport) viewport.scrollTop = Math.max(0, scrollTop);\n reconcile(scrollTop);\n },\n resizeColumn(key, width): void {\n const column = columns.find((candidate) => candidate.key === key);\n if (column) updateColumnWidth(column, Number(width), 'end');\n },\n reorderColumn(key, toIndex): void {\n const from = columns.findIndex((column) => column.key === key);\n const next = reorderColumns(columns, key, integer(toIndex));\n if (!next) return;\n columns = next;\n syncColumnLayout();\n dispatch('ui:data-grid-column-reorder', {column: key, from, to: integer(toIndex), columns: columns.map(({key: columnKey}) => columnKey)});\n },\n selectRow(key): void { changeRow(String(key), true); },\n deselectRow(key): void { changeRow(String(key), false); },\n toggleRow(key): void { changeRow(String(key)); },\n setSelection(value): void { setSelection(value); },\n selectQuery(token, total, except = []): void {\n setSelection({mode: 'query', token: String(token), total: integer(total), except: except.map(String)});\n },\n clearSelection(): void { setSelection({mode: 'ids', ids: []}); },\n };\n return component;\n};\n\nconst registerDataGrid = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiDataGrid', () => UiDataGrid(AlpineInstance))(AlpineInstance);\n};\n\nexport {registerDataGrid, UiDataGrid};\nexport type {DataGridData, DataGridResetOptions, DataGridSetUrlOptions, UiDataGridApi};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\nimport {registerResizableCapability} from '../../capabilities/resizable';\nimport {registerMotionCapability} from '../../capabilities/motion';\nimport {registerSortableCapability} from '../../capabilities/sortable';\nimport {registerDataGrid as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerDataGrid = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerResizableCapability(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerSortableCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerDataGrid};\nexport default registerDataGrid;\nexport * from './index';\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{a as e,d as t,f as n,l as r,m as i,p as a,u as o,y as s}from"./element-adapter-native-data-key-CW8suC9A.js";import{c,f as l,l as u,n as d,t as f}from"./codecs-Cb1ns_47.js";import{r as p,s as m,t as h}from"./dom-qAeVl7dc.js";import{i as g,t as _}from"./alpine-machine-BS13dbK4.js";import{t as v}from"./alpine-data-CytyCyfk.js";import{n as y,t as b}from"./styles-TfvwVPGw.js";import{t as x}from"./machine-Dqut4h89.js";import{n as S,r as C}from"./form-control-BkVb2Qed.js";function w(e){return e.source.types.includes(`Files`)}function ee(e){return e.source.items.filter(function(e){return e.kind===`file`}).map(function(e){return e.getAsFile()}).filter(function(e){return e!=null})}var T=s();function E(e){var r=e.dragEnter,i=r.type,s=r.relatedTarget;return i===`dragenter`?n()?t({dragEnter:r}):s==null?!0:a()?o(s):s instanceof HTMLIFrameElement:!1}function D(e){var t=e.type,n=e.value;return!(t===`application/vnd.pdnd`||t===`text/plain`&&n===`pdnd:android-fallback`)}function O(e){return Array.from(e.types).filter(function(t){return D({type:t,value:e.getData(t)})})}function k(e){return Array.from(e.items).filter(function(t){return t.kind===`file`||D({type:t.type,value:e.getData(t.type)})})}var A=!1,j=e({typeKey:`external`,defaultDropEffect:`copy`,mount:function(e){return(0,T.bind)(window,{type:`dragenter`,listener:function(t){if(!A&&t.dataTransfer&&e.canStart(t)&&E({dragEnter:t})){var n=O(t.dataTransfer);if(n.length){var r={types:n,items:[],getStringData:function(){return null}};e.start({event:t,dragType:{type:`external`,startedFrom:`external`,payload:r,getDropPayload:function(e){if(!e.dataTransfer)return r;var t=k(e.dataTransfer),i=e.dataTransfer.getData.bind(e.dataTransfer);return{types:n,items:t,getStringData:function(e){if(!n.includes(e))return null;var t=i(e);return D({type:e,value:t})?t:null}}}}})}}}})}});function M(e){return j.dropTarget(e)}function te(e){return j.monitor(e)}(function(){if(typeof window>`u`)return;j.registerUsage();var e={type:`idle`},t=e;function n(){t.type===`dragging`&&(A=!1,t.cleanup(),t=e)}function a(){return(0,T.bindAll)(window,[{type:`dragend`,listener:n}].concat(i(r({onDragEnd:n}))),{capture:!0})}(0,T.bind)(window,{type:`dragstart`,listener:function(){t.type===`idle`&&(A=!0,t={type:`dragging`,cleanup:a()})},options:{capture:!0}})})();var N=[`stack`,`inline`],ne=[`auto`,`image`,`none`],P=[`sm`,`md`,`lg`],re={name:l,accept:l,capture:l,multiple:d,required:d,disabled:d,invalid:d,preview:u(ne,`auto`),layout:u(N,`stack`),size:u(P,`md`),heading:l.default(`Drop files here or browse`),text:l,browseLabel:l,empty:f(l,`empty-label`),maxItems:c.min(0).default(0),clearable:d.default(!0),transport:u([`native`,`direct`],`native`),rootClass:l,dropzoneClass:l,listClass:l,itemClass:l,class:l};l.default(`Drop files here or browse`),l.default(`cloud__upload`),u(N,`stack`),u(P,`md`),l.default(`document__blank`),l.default(`Remove file`);var F=[g({name:`uploading`,state:`transfer.direct.uploading`,project:e=>({files:e.context.selection.files.filter(({id:t})=>e.context.transfer.activeIds.includes(t))}),onDone:`UPLOADING_DONE`,onError:`UPLOADING_ERROR`,required:!0,sends:{progress:(e,t,n)=>({type:`UPLOAD_PROGRESS`,id:e,loaded:t,total:n}),cancel:()=>({type:`CANCEL_UPLOAD`})}})],I=e=>e,L=e=>{let t=e.source;return t===`picker`||t===`drop`||t===`remove`||t===`props`?t:`clear`},ie=(e,t)=>{let n=t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);if(n.length===0)return!0;let r=e.name.toLowerCase(),i=e.type.toLowerCase();return n.some(e=>e.startsWith(`.`)?r.endsWith(e):e.endsWith(`/*`)?i.startsWith(e.slice(0,-1)):e.includes(`/`)&&i===e)},R=(e,t,n)=>{let r=I(n).records??[],i=r.filter(e=>ie(e,t.accept)),a=I(n).append&&t.multiple?[...e.selection.files]:[],o=t.multiple?[...a,...i]:i.slice(0,1),s=t.maxItems>0?o.slice(0,t.maxItems):o;return{files:s,limitReached:t.maxItems>0&&s.length>=t.maxItems,rejectedCount:r.length-i.length+o.length-s.length,limitRejectedCount:o.length-s.length,source:L(n)}},z=({context:e,props:t,event:n})=>R(e,t,n).files,ae=e=>z(e).length===0,oe=({context:e,props:t,event:n})=>R(e,t,n).limitReached,B=({context:e,props:t})=>!t.disabled&&e.transfer.status!==`uploading`,V=({props:e})=>e.transport===`direct`,H=({props:e})=>e.transport===`native`,U=e=>V(e)&&(L(e.event)===`picker`||L(e.event)===`drop`)&&z(e).length>0,W=({context:e,props:t,event:n})=>({context:{selection:R(e,t,n)}}),G=({context:e})=>({context:{selection:{...e.selection,files:[],limitReached:!1,rejectedCount:0,limitRejectedCount:0,source:`clear`}}}),K=({context:e,props:t,event:n})=>{let r=R(e,t,n).files,i=new Set(e.selection.files.map(({id:e})=>e)),a=I(n).append?r.filter(({id:e})=>!i.has(e)).map(({id:e})=>e):r.map(({id:e})=>e);return{context:{transfer:{...e.transfer,status:`uploading`,activeIds:a,progress:{...e.transfer.progress,...Object.fromEntries(a.map(e=>[e,0]))},error:``}}}},q=(e,t,n=``)=>({...e.transfer,status:t,error:n}),se=({context:e})=>({context:{transfer:{...q(e,`complete`),progress:{...e.transfer.progress,...Object.fromEntries(e.transfer.activeIds.map(e=>[e,1]))},results:{...e.transfer.results,...Object.fromEntries(e.transfer.activeIds.map(e=>[e,`complete`]))}}}}),ce=({context:e,event:t})=>({context:{transfer:{...q(e,`failed`,t.error instanceof Error?t.error.message:String(t.error??`Upload failed.`)),results:{...e.transfer.results,...Object.fromEntries(e.transfer.activeIds.map(e=>[e,`failed`]))}}}}),le=({context:e})=>({context:{transfer:{...q(e,`canceled`),results:{...e.transfer.results,...Object.fromEntries(e.transfer.activeIds.map(e=>[e,`canceled`]))}}}}),ue=({context:e,event:t})=>{let n=typeof t.id==`string`?t.id:``;if(!e.transfer.activeIds.includes(n))return;let r=Number(t.loaded),i=Number(t.total),a=Number.isFinite(r)&&Number.isFinite(i)&&i>0?Math.min(1,Math.max(0,r/i)):0;return{context:{transfer:{...e.transfer,progress:{...e.transfer.progress,[n]:a}}}}},de=e=>B(e)&&ae(e),fe=e=>B(e)&&oe(e),J=e=>[{target:`#inventory-empty`,guard:de,reduce:`planSelection`,effects:e},{target:`#inventory-capped`,guard:fe,reduce:`planSelection`,effects:e},{target:`#inventory-populated`,guard:B,reduce:`planSelection`,effects:e}],pe=({props:e,context:t,effects:n})=>x({type:`parallel`,on:{PROPS_CHANGED:{reduce:`replaceProps`,effects:`syncProps`}},states:{interaction:{initial:`idle`,states:{idle:{on:{DRAG_ENTER:{target:`dragging`,guard:B,effects:`syncDragging`}}},dragging:{tags:[`dragging`],on:{DRAG_LEAVE:{target:`idle`,effects:`syncDragging`},DROP:{target:`idle`,effects:`syncDragging`},RECONCILE:{target:`idle`,guard:({props:e})=>e.disabled,effects:`syncDragging`}}}}},inventory:{initial:`empty`,on:{FILES_CHANGED:J(`commitSelection`),RECONCILE:J(`reconcileSelection`),FILES_RESET:{target:`#inventory-empty`,guard:B,reduce:`clearSelection`,effects:`resetSelection`},CLEAR_EXISTING:{guard:B,reduce:`clearExisting`,effects:`clearExisting`}},states:{empty:{id:`inventory-empty`,tags:[`empty`]},populated:{id:`inventory-populated`,tags:[`has-files`]},capped:{id:`inventory-capped`,tags:[`has-files`,`limit-reached`]}}},transfer:{initial:`inactive`,states:{inactive:{on:{RECONCILE:[{target:`#transfer-direct-idle`,guard:V,reduce:`setDirectIdle`,effects:`syncTransfer`},{target:`#transfer-native`,reduce:`setNative`,effects:`syncTransfer`}]}},native:{id:`transfer-native`,on:{RECONCILE:{target:`#transfer-direct-idle`,guard:V,reduce:`setDirectIdle`,effects:`syncTransfer`}}},direct:{initial:`idle`,on:{RECONCILE:{target:`#transfer-native`,guard:H,reduce:`setNative`,effects:`syncTransfer`}},states:{idle:{id:`transfer-direct-idle`,on:{FILES_CHANGED:{target:`uploading`,guard:U,reduce:`beginUpload`,effects:`syncTransfer`}}},uploading:{id:`transfer-uploading`,tags:[`uploading`],on:{UPLOAD_PROGRESS:{reduce:`updateProgress`,effects:`syncTransfer`},UPLOADING_DONE:{target:`complete`,reduce:`finishUpload`,effects:[`syncTransfer`,`emitComplete`]},UPLOADING_ERROR:{target:`failed`,reduce:`failUpload`,effects:[`syncTransfer`,`emitError`]},CANCEL_UPLOAD:{target:`canceled`,reduce:`cancelUpload`,effects:[`syncTransfer`,`emitCancel`]},RECONCILE:{target:`canceled`,guard:({props:e})=>e.disabled||e.transport!==`direct`,reduce:`cancelUpload`,effects:[`syncTransfer`,`emitCancel`]}}},complete:{on:{FILES_CHANGED:{target:`uploading`,guard:U,reduce:`beginUpload`,effects:`syncTransfer`}}},failed:{tags:[`upload-failed`],on:{RETRY_UPLOAD:{target:`uploading`,reduce:`retryUpload`,effects:`syncTransfer`},FILES_CHANGED:{target:`uploading`,guard:U,reduce:`beginUpload`,effects:`syncTransfer`}}},canceled:{on:{RETRY_UPLOAD:{target:`uploading`,reduce:`retryUpload`,effects:`syncTransfer`},FILES_CHANGED:{target:`uploading`,guard:U,reduce:`beginUpload`,effects:`syncTransfer`}}}}}}}}},{context:t,props:e,reducers:{replaceProps:({event:e,props:t})=>({props:e.props??t}),planSelection:W,clearSelection:G,clearExisting:({context:e})=>({context:{existing:{...e.existing,cleared:!0}}}),beginUpload:K,retryUpload:({context:e})=>({context:{transfer:{...e.transfer,status:`uploading`,error:``,activeIds:e.selection.files.filter(({id:t})=>e.transfer.results[t]!==`complete`).map(({id:e})=>e)}}}),finishUpload:se,failUpload:ce,cancelUpload:le,updateProgress:ue,setNative:({context:e})=>({context:{transfer:q(e,`native`)}}),setDirectIdle:({context:e})=>({context:{transfer:q(e,`idle`)}})},effects:{commitSelection:n.commitSelection,reconcileSelection:n.reconcileSelection,resetSelection:n.resetSelection,syncProps:n.syncProps,syncDragging:n.syncDragging,clearExisting:n.clearExisting,syncTransfer:n.syncTransfer,emitComplete:n.emitComplete,emitError:n.emitError,emitCancel:n.emitCancel}}),Y=e=>e.selection.files.map(t=>({...t,status:e.transfer.activeIds.includes(t.id)&&e.transfer.status===`uploading`?`uploading`:e.transfer.results[t.id]??`selected`,progress:e.transfer.progress[t.id]??0})),X=b({definition:{component:`ui.file-upload`,parts:{root:{base:[`grid w-full min-w-0 gap-3`]},control:{base:`relative grid min-w-0 gap-3`},input:{base:`sr-only`},dropzone:{base:[`relative grid min-w-0 overflow-hidden rounded-surface-md text-inherit outline-none`],variants:{layout:{stack:`justify-items-center text-center`,inline:`grid-cols-[auto_minmax(0,1fr)_auto] items-center text-left`},size:{sm:`gap-2 p-3`,md:`gap-3 p-4`,lg:`gap-3 p-5`}},defaults:{layout:`stack`,size:`md`}},icon:{base:`size-icon-lg shrink-0 fill-current text-surface-ink-muted`},body:{base:`grid min-w-0 gap-1`},heading:{base:`text-sm font-medium text-inherit`},text:{base:`text-xs font-normal text-surface-ink-muted`},browse:{base:[`inline-flex min-w-0 items-center justify-center rounded-control-md px-2 py-1 text-xs font-medium`]},list:{base:`grid min-w-0 gap-2`},empty:{base:`text-xs text-surface-ink-muted`},item:{base:[`grid min-w-0 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-3 rounded-surface-sm px-3 py-2`]},preview:{base:`flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-surface-xs bg-interaction-hover text-surface-ink-muted`},previewImage:{base:`size-full`},itemIcon:{base:`size-icon fill-current`},itemBody:{base:`grid min-w-0 gap-0.5`},itemName:{base:`truncate text-sm font-medium text-inherit`},itemMeta:{base:`truncate text-xs font-normal text-surface-ink-muted`},itemError:{base:`truncate text-xs font-normal text-intent-danger-text`},remove:{base:[`relative z-20 inline-flex size-control-sm shrink-0 items-center justify-center rounded-control-md border-0 bg-transparent`,`text-surface-ink-muted outline-none`]},removeIcon:{base:`size-icon-xs fill-current leading-none`},clear:{base:`sr-only`}}}}),me=e=>{if(e===0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`],n=Math.min(Math.floor(Math.log(e)/Math.log(1024)),t.length-1),r=e/1024**n;return`${r>=10||n===0?Math.round(r):Number(r.toFixed(1))} ${t[n]}`},he=e=>e?Array.from(e):[],ge=e=>e.type.startsWith(`image/`),_e=(e,t)=>t!==`none`&&(t===`image`||ge(e)),ve=e=>{if(typeof DataTransfer>`u`)return null;let t=new DataTransfer;return e.forEach(e=>t.items.add(e)),t.files},Z=(e,t)=>{let n=ve(t);if(!n)return!1;try{return e.files=n,!0}catch{return!1}},ye=(e,t)=>{let n=`http://www.w3.org/2000/svg`,r=document.createElementNS(n,`svg`),i=document.createElementNS(n,`path`);return r.setAttribute(`viewBox`,`0 0 32 32`),r.setAttribute(`aria-hidden`,`true`),r.setAttribute(`class`,t),i.setAttribute(`d`,e),r.append(i),r},be=e=>{let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`),r=document.createElementNS(t,`polygon`);return n.setAttribute(`viewBox`,`0 0 32 32`),n.setAttribute(`aria-hidden`,`true`),n.setAttribute(`class`,e),r.setAttribute(`points`,`17.4141 16 24 9.4141 22.5859 8 16 14.5859 9.4143 8 8 9.4141 14.5859 16 8 22.5859 9.4143 24 16 17.4141 22.5859 24 24 22.5859 17.4141 16`),n.append(r),n},Q=()=>{let e=null,t=[],n=!1,r=0,i=new Map,a=new Map,o=()=>{if(!e)throw Error(`File upload has not been initialized.`);return e},s=()=>{let e=o().querySelector(`[data-ui-file-upload-input]`);if(!e)throw Error(`File upload requires a native file input.`);return e},c=()=>o().querySelector(`[data-ui-file-upload-dropzone]`),l=()=>o().querySelector(`[data-ui-file-upload-list]`),u=()=>A.getSnapshot().props,d=()=>A.getSnapshot().context,f=e=>({id:`file-${++r}`,name:e.name,bytes:e.size,size:me(e.size),type:e.type||`File`}),g=e=>e.map(e=>{let t=f(e);return i.set(t.id,e),t}),v=e=>{let t=a.get(e);t&&URL.revokeObjectURL(t),a.delete(e)},b=e=>{let t=i.get(e);if(!t||!_e(t,u().preview))return null;let n=a.get(e);if(n)return n;let r=URL.createObjectURL(t);return a.set(e,r),r},x=()=>{n=!0,s().dispatchEvent(new Event(`input`,{bubbles:!0})),s().dispatchEvent(new Event(`change`,{bubbles:!0}))},T=(e,t,n=!1)=>{u().disabled||A.hasTag(`uploading`)||A.send({type:`FILES_CHANGED`,records:e,source:t,append:n})},E=(e,t)=>{let n=l();if(!n)return;n.querySelectorAll(`[data-ui-file-upload-pending]`).forEach(e=>e.remove());let r=Y(e),o=new Set(r.map(({id:e})=>e));[...a.keys()].filter(e=>!o.has(e)).forEach(v),[...i.keys()].filter(e=>!o.has(e)).forEach(e=>i.delete(e));let s=n.querySelector(`[data-existing-file]:not([hidden])`),c=n.querySelector(`[data-ui-file-upload-empty]`);c&&(c.hidden=r.length>0||!!s);let u=y({part:X.parts.item,className:t.itemClass}),d=y({part:X.parts.preview}),f=y({part:X.parts.previewImage}),p=y({part:X.parts.itemBody}),m=y({part:X.parts.itemName}),h=y({part:X.parts.itemMeta}),g=y({part:X.parts.remove}),_=y({part:X.parts.removeIcon}),x=y({part:X.parts.itemIcon});r.forEach(e=>{let t=document.createElement(`li`);t.dataset.uiFileUploadItem=``,t.dataset.uiFileUploadPending=``,t.dataset.fileId=e.id,t.dataset.status=e.status,t.dataset.progress=String(e.progress),t.className=u;let r=document.createElement(`span`);r.dataset.uiFileUploadPreview=``,r.className=d,r.setAttribute(`aria-hidden`,`true`);let i=b(e.id);if(i){let e=document.createElement(`img`);e.src=i,e.alt=``,e.loading=`lazy`,e.decoding=`async`,e.className=`outline outline-1 -outline-offset-1 outline-black/10 dark:outline-white/10 block size-full object-cover ${f}`,r.append(e)}else r.append(ye(`M25.7,9.3l-7-7A.9078.9078,0,0,0,18,2H8A2.0059,2.0059,0,0,0,6,4V28a2.0059,2.0059,0,0,0,2,2H24a2.0059,2.0059,0,0,0,2-2V10A.9078.9078,0,0,0,25.7,9.3ZM18,4.4,23.6,10H18ZM24,28H8V4h8v6a2.0059,2.0059,0,0,0,2,2h6Z`,x));let a=document.createElement(`span`);a.className=p;let o=document.createElement(`span`);o.dataset.uiFileUploadItemName=``,o.className=m,o.textContent=e.name;let s=document.createElement(`span`);s.dataset.uiFileUploadItemMeta=``,s.className=h,s.textContent=[e.size,e.type].filter(Boolean).join(` · `),a.append(o,s);let c=document.createElement(`button`);c.type=`button`,c.dataset.uiFileUploadRemove=``,c.dataset.fileId=e.id,c.className=g,c.disabled=A.hasTag(`uploading`),c.setAttribute(`aria-label`,`Remove ${e.name}`),c.append(be(_)),t.append(r,a,c),n.append(t)})},D=(e=d(),t=u())=>{let n=Y(e),r=e.existing.present&&!e.existing.cleared,i=n.length>0||r,a=t.disabled||e.selection.limitReached||e.transfer.status===`uploading`,l=s();C({input:l,state:{disabled:t.disabled,required:t.required,invalid:t.invalid}}),t.transport===`native`&&t.name?l.name=t.name:l.removeAttribute(`name`),l.multiple=t.multiple,t.accept?l.setAttribute(`accept`,t.accept):l.removeAttribute(`accept`),t.capture?l.setAttribute(`capture`,t.capture):l.removeAttribute(`capture`),a&&!t.disabled?(l.setAttribute(`aria-disabled`,`true`),l.tabIndex=-1):t.disabled||(l.removeAttribute(`aria-disabled`),l.removeAttribute(`tabindex`)),l.form&&(l.form.enctype=`multipart/form-data`),S({el:o(),state:t,value:`true`}),m({el:o(),attr:`data-empty`,present:!i,value:`true`}),m({el:o(),attr:`data-has-files`,present:i,value:`true`}),m({el:o(),attr:`data-multiple`,present:t.multiple,value:`true`}),m({el:o(),attr:`data-max-items-reached`,present:e.selection.limitReached,value:`true`}),m({el:o(),attr:`data-has-existing-file`,present:r,value:`true`}),o().dataset.transport=t.transport,o().dataset.transferState=e.transfer.status;let f=c();f&&(S({el:f,state:{disabled:a,invalid:t.invalid},value:`true`}),m({el:f,attr:`data-multiple`,present:t.multiple,value:`true`}),m({el:f,attr:`data-has-files`,present:i,value:`true`}),m({el:f,attr:`data-max-items-reached`,present:e.selection.limitReached,value:`true`})),E(e,t)},O=e=>({selection:{files:[],limitReached:!1,rejectedCount:0,limitRejectedCount:0,source:`clear`},existing:{present:!!o().querySelector(`[data-ui-file-upload-item][data-existing-file]`),cleared:!1},transfer:{status:e.transport===`native`?`native`:`idle`,activeIds:[],progress:{},results:{},error:``}}),k=e=>{let t=e.context.selection.files.flatMap(({id:e})=>i.get(e)??[]);return Z(s(),t)?(D(e.context,e.props),!0):(s().value=``,A.send(`FILES_RESET`),!1)},A=_({schema:re,hooks:F,createMachine:({props:e})=>pe({props:e,context:O(e),effects:{commitSelection:e=>{k(e)&&(e.context.selection.limitRejectedCount>0&&p({el:o(),name:`ui:file-upload-limit`,detail:{rejectedCount:e.context.selection.limitRejectedCount}}),e.context.selection.source!==`picker`&&x(),p({el:o(),name:`ui:file-upload-change`,detail:{files:Y(e.context),source:e.context.selection.source}}))},reconcileSelection:e=>{k(e)},resetSelection:e=>{s().value=``,D(e.context,e.props)},syncProps:e=>{D(e.context,e.props),A.send({type:`RECONCILE`,records:e.context.selection.files,source:`props`})},syncDragging:e=>{let t=e.snapshot.tags.includes(`dragging`);m({el:o(),attr:`data-dragging`,present:t,value:`true`});let n=c();n&&m({el:n,attr:`data-dragging`,present:t,value:`true`})},clearExisting:e=>{let t=o().querySelector(`[data-ui-file-upload-clear]`);t&&(t.checked=!0,t.dispatchEvent(new Event(`change`,{bubbles:!0})));let n=o().querySelector(`[data-ui-file-upload-item][data-existing-file]`);n&&(n.hidden=!0),D(e.context,e.props),p({el:o(),name:`ui:file-upload-change`,detail:{files:Y(e.context),source:e.context.selection.source}})},syncTransfer:e=>D(e.context,e.props),emitComplete:e=>p({el:o(),name:`ui:file-upload-complete`,detail:{files:Y(e.context)}}),emitError:e=>p({el:o(),name:`ui:file-upload-error`,detail:{files:Y(e.context),error:e.context.transfer.error}}),emitCancel:e=>p({el:o(),name:`ui:file-upload-cancel`,detail:{files:Y(e.context)}})}})}),j={...A,get files(){return this.snapshot.current?Y(this.snapshot.current.context):[]},get hasFiles(){return(this.snapshot.current?.context.selection.files.length??0)>0||!!(this.snapshot.current?.context.existing.present&&!this.snapshot.current.context.existing.cleared)},get isDragging(){return this.snapshot.current?.tags.includes(`dragging`)??!1},get isUploading(){return this.snapshot.current?.tags.includes(`uploading`)??!1},get isLimitReached(){return this.snapshot.current?.context.selection.limitReached??!1},init(){e=this.$el,A.connect(this.$el,this.snapshot);let r=s();h({target:r,event:`change`,handler:()=>{if(n){n=!1;return}T(g(he(r.files)),`picker`)},cleanup:t}),h({target:o(),event:`click`,handler:e=>{let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`[data-ui-file-upload-remove][data-file-id]`);if(n?.dataset.fileId){e.preventDefault(),j.remove(n.dataset.fileId);return}t.closest(`[data-ui-file-upload-remove][data-existing-file]`)&&(e.preventDefault(),A.send(`CLEAR_EXISTING`))},cleanup:t});let i=c();i&&(t.push(M({element:i,canDrop:({source:e})=>!u().disabled&&!A.hasTag(`uploading`)&&w({source:e}),getDropEffect:()=>`copy`,onDragEnter:()=>A.send(`DRAG_ENTER`),onDragLeave:()=>A.send(`DRAG_LEAVE`),onDrop:({source:e})=>{A.send(`DROP`),w({source:e})&&T(g(ee({source:e})),`drop`,u().multiple)}})),t.push(te({canMonitor:({source:e})=>w({source:e}),onDrop:()=>A.send(`DRAG_LEAVE`)}))),D(),A.send({type:`RECONCILE`,records:[],source:`props`})},destroy(){t.forEach(e=>e()),t=[],a.forEach(e=>URL.revokeObjectURL(e)),a.clear(),i.clear(),A.disconnect(),e=null},browse(){!u().disabled&&!A.hasTag(`uploading`)&&s().click()},remove(e){u().disabled||A.hasTag(`uploading`)||!i.has(e)||T(d().selection.files.filter(t=>t.id!==e),`remove`)},retry(){A.send(`RETRY_UPLOAD`)},cancel(){A.send(`CANCEL_UPLOAD`)},file(e){return i.get(e)??null},preview(e){return b(e)}};return j},xe=v(`UiFileUpload`,Q),$=new WeakSet,Se=e=>{$.has(e)||($.add(e),xe(e))};export{Q as n,Se as t};
2
+ //# sourceMappingURL=entry.generated-BV49EHah.js.map