@vireo-ai/trellis-ui 0.1.49 → 0.1.51

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 (190) hide show
  1. package/package.json +1 -1
  2. package/packages/client/src/components/data-grid/styles.css +30 -9
  3. package/packages/client/src/components/field/styles.css +29 -3
  4. package/packages/client/src/components/import-flow/styles.css +20 -0
  5. package/packages/client/src/components/import-mapper/styles.css +8 -0
  6. package/packages/client/src/components/tabs/styles.css +1 -1
  7. package/packages/client/src/styles/components.css +2 -0
  8. package/packages/client/src/styles/generated/theme-fonts.css +1 -1
  9. package/packages/client/src/styles/generated/theme-palette.css +8 -1
  10. package/packages/client/src/styles/generated/theme-runtime.css +1 -1
  11. package/packages/client/src/styles/generated-sources.css +1 -1
  12. package/packages/client/src/styles/recipes/option.css +4 -0
  13. package/packages/client/types/assets/full-runtime.generated.d.ts +1 -1
  14. package/packages/client/types/components/data-grid/contract.d.ts +1 -0
  15. package/packages/client/types/components/data-grid/index.d.ts +3 -3
  16. package/packages/client/types/components/data-grid/model.d.ts +4 -2
  17. package/packages/client/types/components/date-picker/contract.d.ts +15 -6
  18. package/packages/client/types/components/date-picker/machine.d.ts +4 -2
  19. package/packages/client/types/components/entry.generated.d.ts +2 -0
  20. package/packages/client/types/components/formset/contract.d.ts +10 -0
  21. package/packages/client/types/components/formset/entry.generated.d.ts +5 -0
  22. package/packages/client/types/components/formset/index.d.ts +41 -0
  23. package/packages/client/types/components/formset/machine.d.ts +22 -0
  24. package/packages/client/types/components/formset/runtime-docs.d.ts +2 -0
  25. package/packages/client/types/components/heading/contract.d.ts +4 -2
  26. package/packages/client/types/components/import-flow/contract.d.ts +13 -0
  27. package/packages/client/types/components/import-flow/index.d.ts +2 -0
  28. package/packages/client/types/components/import-mapper/entry.generated.d.ts +5 -0
  29. package/packages/client/types/components/import-mapper/index.d.ts +25 -0
  30. package/packages/client/types/components/menu/contract.d.ts +2 -2
  31. package/packages/client/types/components/runtime.d.ts +2 -0
  32. package/packages/client/types/components/select/contract.d.ts +1 -0
  33. package/packages/client/types/components/select/machine.d.ts +3 -0
  34. package/packages/client/types/components/sidebar/contract.d.ts +8 -2
  35. package/packages/client/types/components/text/contract.d.ts +4 -2
  36. package/packages/client/types/components/virtualizer/index.d.ts +4 -1
  37. package/packages/client/types/motion/index.d.ts +1 -0
  38. package/packages/client/types/motion/registry.d.ts +2 -1
  39. package/packages/client/types/runtime/cursor-data-source.d.ts +19 -1
  40. package/packages/client/types/runtime/engine/stream.d.ts +1 -0
  41. package/packages/client/types/runtime/focus-handoff.d.ts +1 -0
  42. package/packages/client/types/runtime/virtualizer-schema.d.ts +1 -0
  43. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +111 -12
  44. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +1 -1
  45. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +458 -385
  46. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +1 -1
  47. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut.js +1 -1
  48. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +1 -1
  49. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{alpine-machine-BS13dbK4.js → alpine-machine-BTDXpEr6.js} +2 -2
  50. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{alpine-machine-BS13dbK4.js.map → alpine-machine-BTDXpEr6.js.map} +1 -1
  51. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-DRILCSFH.js +2 -0
  52. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-DoZROkFD.js.map → capability-motion-DRILCSFH.js.map} +1 -1
  53. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-shortcut-BoDF_wQX.js → capability-shortcut-CGpfLNL-.js} +2 -2
  54. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-shortcut-BoDF_wQX.js.map → capability-shortcut-CGpfLNL-.js.map} +1 -1
  55. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-CpSdQwYp.js +3 -0
  56. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-CpSdQwYp.js.map +1 -0
  57. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-qWtZCkAC.js → controller-xDNH-xzt.js} +2 -2
  58. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-qWtZCkAC.js.map → controller-xDNH-xzt.js.map} +1 -1
  59. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-DnQs1xY6.js +2 -0
  60. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-BgbZXaDN.js.map → core-DnQs1xY6.js.map} +1 -1
  61. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-5pQvlhmK.js +2 -0
  62. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-5pQvlhmK.js.map +1 -0
  63. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-B_e0djHK.js → entry.generated-2QEJDMe-.js} +2 -2
  64. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-B_e0djHK.js.map → entry.generated-2QEJDMe-.js.map} +1 -1
  65. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CkBblBv9.js → entry.generated-AFRarPro.js} +2 -2
  66. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CkBblBv9.js.map → entry.generated-AFRarPro.js.map} +1 -1
  67. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D6qaa8bk.js → entry.generated-BB7wWQfT.js} +2 -2
  68. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D6qaa8bk.js.map → entry.generated-BB7wWQfT.js.map} +1 -1
  69. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BiyFgA-e.js +2 -0
  70. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BiyFgA-e.js.map +1 -0
  71. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-f6HGqvQY.js → entry.generated-BqEMECZx.js} +2 -2
  72. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-f6HGqvQY.js.map → entry.generated-BqEMECZx.js.map} +1 -1
  73. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C07Tn0r-.js +2 -0
  74. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C07Tn0r-.js.map +1 -0
  75. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CZWpqP88.js → entry.generated-C2gP0OfV.js} +2 -2
  76. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CZWpqP88.js.map → entry.generated-C2gP0OfV.js.map} +1 -1
  77. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CPzThz_M.js +2 -0
  78. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CPzThz_M.js.map +1 -0
  79. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CRj4-Ef1.js +2 -0
  80. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CRj4-Ef1.js.map +1 -0
  81. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CeD3bUBI.js +2 -0
  82. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CeD3bUBI.js.map +1 -0
  83. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Cj1CmH13.js → entry.generated-CirM6w9Q.js} +2 -2
  84. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Cj1CmH13.js.map → entry.generated-CirM6w9Q.js.map} +1 -1
  85. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CRhvZ0DI.js → entry.generated-D3am_GtI.js} +2 -2
  86. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CRhvZ0DI.js.map → entry.generated-D3am_GtI.js.map} +1 -1
  87. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D7qa64eM.js +2 -0
  88. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-ZcYuKSSI.js.map → entry.generated-D7qa64eM.js.map} +1 -1
  89. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D_FlEfdN.js +2 -0
  90. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D_FlEfdN.js.map +1 -0
  91. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DbC4gkeV.js +2 -0
  92. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DbC4gkeV.js.map +1 -0
  93. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-dyQ_HJ8D.js → entry.generated-DwYIFLsE.js} +2 -2
  94. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-dyQ_HJ8D.js.map → entry.generated-DwYIFLsE.js.map} +1 -1
  95. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-QspMEPHx.js → entry.generated-QspMEPHx.js} +1 -1
  96. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-QspMEPHx.js.map +1 -0
  97. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-B_q7LVNv.js → entry.generated-TbFjT_mY.js} +2 -2
  98. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-B_q7LVNv.js.map → entry.generated-TbFjT_mY.js.map} +1 -1
  99. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BhtgeSTa.js → entry.generated-cnWgB3wz.js} +2 -2
  100. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BhtgeSTa.js.map → entry.generated-cnWgB3wz.js.map} +1 -1
  101. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-CPbvsglm.js → entry.generated-gxr2-89M.js} +2 -2
  102. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-gxr2-89M.js.map +1 -0
  103. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Cekl4pYo.js → entry.generated-wEt8LYAv.js} +2 -2
  104. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Cekl4pYo.js.map → entry.generated-wEt8LYAv.js.map} +1 -1
  105. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-BSal0xp9.js +2 -0
  106. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-BSal0xp9.js.map +1 -0
  107. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-D26Cigu5.js +2 -0
  108. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-D26Cigu5.js.map +1 -0
  109. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-DCbmWkHV.js +2 -0
  110. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-DCbmWkHV.js.map +1 -0
  111. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-JcxejQr4.js +2 -0
  112. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-JcxejQr4.js.map +1 -0
  113. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-BE3g0swK.js +2 -0
  114. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-BE3g0swK.js.map +1 -0
  115. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{form-control-BkVb2Qed.js → form-control-DjbUb602.js} +2 -2
  116. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/form-control-DjbUb602.js.map +1 -0
  117. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/morph-Cq3V_23_.js +2 -0
  118. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/morph-Cq3V_23_.js.map +1 -0
  119. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-B4uuk1JX.js +3 -0
  120. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-BQk-uLaI.js.map → motion-B4uuk1JX.js.map} +1 -1
  121. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{semantic-observer-BUswpsNx.js → semantic-observer-CdRbZHir.js} +2 -2
  122. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{semantic-observer-BUswpsNx.js.map → semantic-observer-CdRbZHir.js.map} +1 -1
  123. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-FOJhyz8V.js +4 -0
  124. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-FOJhyz8V.js.map +1 -0
  125. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +1 -1
  126. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox.js +1 -1
  127. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +1 -1
  128. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +1 -1
  129. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload.js +1 -1
  130. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +1 -1
  131. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field.js +1 -1
  132. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload.js +1 -1
  133. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset.js +1 -0
  134. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper.js +1 -0
  135. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +1 -1
  136. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js.map +1 -1
  137. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input.js +1 -1
  138. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding.js +1 -1
  139. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +1 -1
  140. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +1 -1
  141. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio.js +1 -1
  142. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area.js +1 -1
  143. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +1 -1
  144. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +1 -1
  145. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider.js +1 -1
  146. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch.js +1 -1
  147. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table.js +1 -1
  148. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +1 -1
  149. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +1 -1
  150. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +1 -1
  151. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer.js +1 -1
  152. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +1 -1
  153. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +1 -1
  154. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js.map +1 -1
  155. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +225 -182
  156. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +9 -9
  157. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +9 -9
  158. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-DoZROkFD.js +0 -2
  159. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-DtSghTO8.js +0 -3
  160. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-DtSghTO8.js.map +0 -1
  161. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-BgbZXaDN.js +0 -2
  162. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-1meMFJbq.js +0 -2
  163. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-1meMFJbq.js.map +0 -1
  164. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B-wVMxe6.js +0 -2
  165. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B-wVMxe6.js.map +0 -1
  166. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BYDBzadH.js +0 -2
  167. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BYDBzadH.js.map +0 -1
  168. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CJuVLJw9.js +0 -2
  169. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CJuVLJw9.js.map +0 -1
  170. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CQGhCt9y.js +0 -2
  171. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CQGhCt9y.js.map +0 -1
  172. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Des-gEaR.js +0 -2
  173. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Des-gEaR.js.map +0 -1
  174. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-OqzkZfIu.js +0 -2
  175. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-OqzkZfIu.js.map +0 -1
  176. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-ZcYuKSSI.js +0 -2
  177. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-u0Ueamvw.js +0 -2
  178. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-u0Ueamvw.js.map +0 -1
  179. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-CPbvsglm.js.map +0 -1
  180. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-Dzq4GSqn.js +0 -2
  181. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-Dzq4GSqn.js.map +0 -1
  182. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-QspMEPHx.js.map +0 -1
  183. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-DzEyK-Fp.js +0 -2
  184. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-DzEyK-Fp.js.map +0 -1
  185. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/form-control-BkVb2Qed.js.map +0 -1
  186. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-BQk-uLaI.js +0 -3
  187. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-DuGUQhxd.js +0 -4
  188. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-DuGUQhxd.js.map +0 -1
  189. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtualizer-CSk2RJEN.js +0 -2
  190. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtualizer-CSk2RJEN.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{t as e}from"./capability-motion-DoZROkFD.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{i as u,n as d,r as f,t as p}from"./virtualizer-CSk2RJEN.js";import{t as m}from"./drag-and-drop-DHq3udf7.js";import{t as h}from"./capability-sortable-DtSghTO8.js";import{L as g,y as _}from"./common-Dfj6NCjU.js";import{t as v}from"./capability-resizable-Bga8TngJ.js";var y=[`none`,`single`,`multiple`],b=[`compact`,`default`,`comfortable`],x=[`none`,`row`,`grid`],S=[`onChange`,`onEnd`],C=[``,`left`,`right`],w=[`none`,`ascending`,`descending`,`other`],T=[`start`,`center`,`end`],E={fetchUrl:n,cursor:i,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(y,`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(S,`onChange`),color:r(g,`neutral`),interaction:r(_,`edge`),dragPreviewPosition:n.trim.default(`preserve`),density:r(b,`default`),border:r(x,`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(C,``),r(w,`none`),i.default(!0),i.default(!0),r(T,`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(T,`start`);var 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:n},O=(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},k=(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,D(e,`data-min-width`,t.minWidth)),a=O(e,`data-max-width`,t.maxWidth),o=D(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:k(e,`data-sortable`,!1),sort:l,resizable:k(e,`data-resizable`,t.resizable),reorderable:k(e,`data-reorderable`,t.reorderable),align:u,cellClass:e.dataset.cellClass??``,element:e}]})},te=e=>e.map(({width:e})=>`${e}px`).join(` `),A=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}},j=e=>globalThis.CSS?.escape?globalThis.CSS.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`),M=(e,t)=>{let n=A(t);return t.map((t,r)=>{let i=`[data-ui-data-grid-scope="${j(e)}"]`,a=`[data-column="${j(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(``)},N=(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}},P=(e,t)=>e.mode===`query`?!e.except.includes(t):e.ids.includes(t),F=(e,t,n,r)=>{let i=N(e,n);if(n===`none`)return{selection:i,added:[],removed:[]};let a=P(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]}},I=(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},L=(e,t=0)=>Math.max(t,Math.floor(Number.isFinite(e)?e:t)),R=`a,button,input,select,textarea,[contenteditable],[role="button"],[role="link"]`,z=e=>{let t=null,n=null,r=null,i=null,o=null,l=[],h=[],g=0,_={mode:`ids`,ids:[]},v=``,y=null,b=0,x=0,S=!1,C=null,w=!1,T=null,D=new Map,O=[],k=d(f),A=(e,n)=>{t?.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:n}))},j=(e,t)=>{let n=t.split(/\s+/).filter(Boolean);n.length&&e.classList.add(...n)},z=()=>Array.from(t?.querySelectorAll(`[data-ui-data-grid-row]`)??[]),B=()=>{z().forEach(e=>{let t=e.dataset.rowKey??``,n=$.props.selection!==`none`&&t!==``&&P(_,t);e.toggleAttribute(`data-selected`,n),$.props.selection===`none`?e.removeAttribute(`aria-selected`):e.setAttribute(`aria-selected`,String(n))})},V=()=>{if(!t||!o)return;t.style.setProperty(`--ui-data-grid-template`,te(l));let e=t.dataset.uiDataGridScope??``;o.textContent=M(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),z().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)}),z().forEach(e=>j(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)),j(e,$.props.cellClass),j(e,n.cellClass),n.pinned?e.dataset.pinned=n.pinned:e.removeAttribute(`data-pinned`)}})},H=()=>{!t||!i||(T||(t.toggleAttribute(`data-loading`,x>0),t.toggleAttribute(`data-empty`,g===0)),t.dataset.selection=$.props.selection,r?.setAttribute(`aria-rowcount`,String(g+1)),t.style.setProperty(`--ui-data-grid-row-height`,`${$.props.rowHeight}px`),t.style.setProperty(`--ui-data-grid-total-height`,`${Math.max(g*$.props.rowHeight,$.props.rowHeight)}px`),(!T||g>0)&&(i.style.height=`var(--ui-data-grid-total-height)`),B())},U=e=>{let t=L(e);t!==g&&(g=t,H(),A(`ui:data-grid-total-change`,{totalRows:g}))},W=e=>f.compute({axes:{y:{total:g,itemSize:$.props.rowHeight,viewportSize:$.props.bufferSize*$.props.rowHeight,scrollOffset:e*$.props.rowHeight,buffer:0}}}),G=e=>{if(g===0)return[];let t=L($.props.bufferSize,1),n=Math.min(g-1,Math.floor(Math.max(0,e)/$.props.rowHeight)),r=Math.floor(n/t)*t,i=Math.floor((g-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(W)},K=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}`},ne=()=>{if(x=Math.max(0,x-1),H(),x>0||y===null||S)return;let e=y;y=null,q(e)},re=async(n,r,i)=>{let a=r.axes.y;if(!a)return;let o=new AbortController;D.set(n.key,o),x+=1,H(),t?.removeAttribute(`data-error`),A(`ui:data-grid-load-start`,{window:r});try{let s=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${i.requestGeneration}`,l=await fetch(K(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){k.fail(i),t?.setAttribute(`data-error`,``),A(`ui:data-grid-error`,{window:r,status:l.status});return}let d=await u(l,$.props);if(k.pending(n.key)!==i||S||!await c(e,n.element,d.html,{assets:d.assets,shouldReplace:()=>k.pending(n.key)===i&&!S})||(d.totalItems!==null&&U(d.totalItems),!k.commit(i,r)))return;n.element.style.height=`${a.count*$.props.rowHeight}px`,n.element.style.transform=`translateY(${a.translateOffset}px)`,V(),B(),A(`ui:data-grid-load`,{window:r,start:a.start,count:a.count,end:a.start+a.count})}catch(e){if(o.signal.aborted)return;k.fail(i),t?.setAttribute(`data-error`,``),A(`ui:data-grid-error`,{window:r,status:0,error:e})}finally{D.get(n.key)===o&&D.delete(n.key),ne()}},q=t=>{if(T||$.props.cursor)return;if(x>0){y=t;return}let n=G(t),r=Math.min(Math.max(0,g-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&&v!==i.key){v=i.key;let e=i.axes.y;A(`ui:data-grid-range`,{start:e.start,count:e.count,end:e.start+e.count,window:i})}if(n.length===0){h.forEach(t=>void c(e,t.element,``));return}let a=new Set;n.forEach(e=>{let t=h.find(t=>k.mounted(t.key)?.key===e.key);t&&a.add(t)});let o=h.filter(e=>!a.has(e));n.forEach(e=>{if(h.some(t=>k.mounted(t.key)?.key===e.key))return;let t=o.shift();if(!t)return;let n=k.begin(t.key,e);n&&re(t,e,n)})},J=()=>{D.forEach(e=>e.abort()),D.clear(),x=0,y=null,v=``,k.invalidate(),h.forEach(t=>{t.element.style.height=``,t.element.style.transform=``,c(e,t.element,``)}),H()},Y=(e,n)=>{_=N(e,$.props.selection),w=!0,$.props.selectionValue=_,t&&s({el:t,schema:E,key:`selectionValue`,value:_}),w=!1,B(),A(`ui:data-grid-selection-change`,{selection:_,added:n?.added??[],removed:n?.removed??[]})},X=(e,t)=>{let n=F(_,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)),V(),A(`ui:data-grid-column-resize`,{column:e.key,width:e.width,phase:n})},Q=()=>{O.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);O.push(m({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}))})},$={get supportsSeek(){return T?.supportsSeek??!1},props:null,init(){t=this.$el,S=!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:E,onChange:(e,t)=>{if(w)return;let n=t.map(({key:e})=>e);(n.includes(`selectionValue`)||n.includes(`selection`))&&(_=N(this.props.selectionValue,this.props.selection),B()),n.includes(`resizableColumns`)&&Q(),n.includes(`totalRows`)?(U(this.props.totalRows),T?T.setTotalItems(this.props.totalRows):this.reload()):n.some(e=>[`fetchUrl`,`rowHeight`,`bufferSize`].includes(e))&&this.reload()}}),g=L(this.props.totalRows),_=N(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]`),h=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||h.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}),V(),Q(),C=new AbortController,n.addEventListener(`scroll`,()=>{b||=requestAnimationFrame(()=>{b=0,n&&q(n.scrollTop)})},{passive:!0,signal:C.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`;A(`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(R)&&X(a),A(`ui:data-grid-row-activate`,{rowKey:a,row:i})},{signal:C.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&&A(`ui:data-grid-cell-activate`,{rowKey:n.dataset.rowKey??``,column:t.dataset.column??``,cell:t})},{signal:C.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:C.signal}),t.addEventListener(`ui:virtualizer-total-change`,(e=>{!T||e.target!==t||U(Number(e.detail?.totalItems??0))}),{signal:C.signal}),t.addEventListener(`ui:virtualizer-load-start`,(e=>{!T||e.target!==t||A(`ui:data-grid-load-start`,{mode:`cursor`})}),{signal:C.signal}),t.addEventListener(`ui:virtualizer-load`,(e=>{!T||e.target!==t||(V(),B(),A(`ui:data-grid-load`,{...e.detail,mode:`cursor`}))}),{signal:C.signal}),t.addEventListener(`ui:virtualizer-error`,(e=>{!T||e.target!==t||A(`ui:data-grid-error`,{...e.detail,mode:`cursor`})}),{signal:C.signal}),n.style.overscrollBehavior=`contain`,n.style.overflowAnchor=`none`,n.scrollTop=f.scrollTo({total:g,itemSize:this.props.rowHeight,viewportSize:n.clientHeight,scrollOffset:0,buffer:this.props.bufferSize},{axis:`y`,index:this.props.initialIndex}),H(),this.props.cursor||q(n.scrollTop)},destroy(){S=!0,b&&cancelAnimationFrame(b),C?.abort(),C=null,O.splice(0).forEach(e=>e()),T?.destroy(),T=null,J(),this.props.disconnect(),t=null,n=null,r=null,i=null,o=null,l=[],h=[]},scrollToIndex(e,t=`start`){if(T){T.scrollToIndex(e,t);return}n&&(n.scrollTop=f.scrollTo({total:g,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){if(U(e),T){T.setTotalItems(e);return}this.reload({scrollTop:n?.scrollTop??0})},setQuery(e){T?.setQuery(e)},useCursor(r){if(!t||!n||!i)return;T?.destroy(),T=null,J(),t.dataset.totalItems=String(g),t.dataset.itemSize=String(this.props.rowHeight),i.setAttribute(`data-ui-virtualizer-spacer`,``),h.forEach(({element:e})=>e.setAttribute(`data-ui-virtualizer-block`,``));let a=p(e,{cursor:r});T=a,Object.assign(a,{$el:t}),a.init()},setUrl(e,n={}){w=!0,this.props.fetchUrl=String(e),t&&s({el:t,schema:E,key:`fetchUrl`,value:String(e)}),w=!1,n.reset??!0?this.reset():this.reload()},reset(e={}){if(T){T.reset({scrollTop:e.scrollTop??0});return}this.reload({scrollTop:e.scrollTop??0})},reload(e={}){if(T){T.reload(e);return}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=I(l,e,L(t));r&&(l=r,V(),A(`ui:data-grid-column-reorder`,{column:e,from:n,to:L(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:L(t),except:n.map(String)})},clearSelection(){Y({mode:`ids`,ids:[]})}};return $},B=e=>{l(`UiDataGrid`,()=>z(e))(e)},V=new WeakSet,H=t=>{V.has(t)||(V.add(t),v(t),e(t),h(t),B(t))};export{z as n,H as t};
2
- //# sourceMappingURL=entry.generated-1meMFJbq.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entry.generated-1meMFJbq.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 cursor: bool,\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 {\n UiVirtualizer,\n type CursorVirtualizerOptions,\n type UiVirtualizerApi,\n type VirtualizerData,\n} from '../../runtime/virtualizer';\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\n/** Options for resetting an indexed or cursor-backed Data Grid. @public */\ninterface DataGridResetOptions {\n /** Scroll offset restored after the first page loads. */\n scrollTop?: number;\n}\n\n/** Options for replacing an indexed Data Grid endpoint. @public */\ninterface DataGridSetUrlOptions {\n /** Whether to discard loaded rows and reload immediately. */\n reset?: boolean;\n}\n\n/** Public Alpine API for `ui.data-grid`. @public */\ninterface UiDataGridApi {\n /** Whether the active cursor data source supports server-side index seeking. */\n readonly supportsSeek: boolean;\n /** Discard loaded rows and request the current indexed range or first cursor page again. */\n reload(options?: DataGridResetOptions): void;\n /** Return the grid to its initial indexed range or first cursor page. */\n reset(options?: DataGridResetOptions): void;\n /** Scroll to a row and seek through the server when its cursor page is not loaded. */\n scrollToIndex(index: number, align?: VirtualScrollAlign): void;\n /** Replace the indexed endpoint, optionally resetting loaded rows. */\n setUrl(url: string, options?: DataGridSetUrlOptions): void;\n /** Update the independently managed total row count. */\n setTotalRows(count: number): void;\n /** Replace cursor query parameters and reset to the first cursor page. */\n setQuery<Query>(query: Query): void;\n /** Activate cursor mode with a generic data source and response adapter. */\n useCursor<Query, Content>(options: CursorVirtualizerOptions<Query, Content>): void;\n /** Resize a column to a pixel width. */\n resizeColumn(key: string, width: number): void;\n /** Move a column to a new zero-based position. */\n reorderColumn(key: string, toIndex: number): void;\n /** Add a row key to the explicit selection. */\n selectRow(key: string): void;\n /** Remove a row key from the explicit selection. */\n deselectRow(key: string): void;\n /** Toggle a row key in the current selection. */\n toggleRow(key: string): void;\n /** Replace the complete row selection value. */\n setSelection(value: DataGridSelectionValue): void;\n /** Select all rows represented by a server-owned query token. */\n selectQuery(token: string, total: number, except?: string[]): void;\n /** Clear explicit and query-backed row selection. */\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};\ntype CursorDelegate = TrellisAlpineComponent<VirtualizerData<unknown>> & UiVirtualizerApi<unknown>;\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 let cursorDelegate: CursorDelegate | null = null;\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 if (!cursorDelegate) {\n root.toggleAttribute('data-loading', loading > 0);\n root.toggleAttribute('data-empty', totalRows === 0);\n }\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 if (!cursorDelegate || totalRows > 0) 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 (cursorDelegate || component.props.cursor) return;\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 get supportsSeek(): boolean { return cursorDelegate?.supportsSeek ?? false; },\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 if (cursorDelegate) cursorDelegate.setTotalItems(this.props.totalRows);\n else 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 root.addEventListener('ui:virtualizer-total-change', ((event: CustomEvent) => {\n if (!cursorDelegate || event.target !== root) return;\n updateTotal(Number(event.detail?.totalItems ?? 0));\n }) as EventListener, {signal: listenerAborter.signal});\n root.addEventListener('ui:virtualizer-load-start', ((event: CustomEvent) => {\n if (!cursorDelegate || event.target !== root) return;\n dispatch('ui:data-grid-load-start', {mode: 'cursor'});\n }) as EventListener, {signal: listenerAborter.signal});\n root.addEventListener('ui:virtualizer-load', ((event: CustomEvent) => {\n if (!cursorDelegate || event.target !== root) return;\n syncColumnLayout();\n reflectMountedSelection();\n dispatch('ui:data-grid-load', {...event.detail, mode: 'cursor'});\n }) as EventListener, {signal: listenerAborter.signal});\n root.addEventListener('ui:virtualizer-error', ((event: CustomEvent) => {\n if (!cursorDelegate || event.target !== root) return;\n dispatch('ui:data-grid-error', {...event.detail, mode: 'cursor'});\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 if (!this.props.cursor) 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 cursorDelegate?.destroy();\n cursorDelegate = null;\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 (cursorDelegate) {\n cursorDelegate.scrollToIndex(index, align);\n return;\n }\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 if (cursorDelegate) {\n cursorDelegate.setTotalItems(count);\n return;\n }\n this.reload({scrollTop: viewport?.scrollTop ?? 0});\n },\n setQuery(query): void { cursorDelegate?.setQuery(query); },\n useCursor(options): void {\n if (!root || !viewport || !spacer) return;\n cursorDelegate?.destroy();\n cursorDelegate = null;\n invalidate();\n root.dataset.totalItems = String(totalRows);\n root.dataset.itemSize = String(this.props.rowHeight);\n spacer.setAttribute('data-ui-virtualizer-spacer', '');\n blocks.forEach(({element}) => element.setAttribute('data-ui-virtualizer-block', ''));\n const delegate = UiVirtualizer<unknown, unknown>(AlpineInstance, {\n cursor: options as unknown as CursorVirtualizerOptions<unknown, unknown>,\n }) as CursorDelegate;\n cursorDelegate = delegate;\n Object.assign(delegate, {$el: root});\n delegate.init();\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 {\n if (cursorDelegate) {\n cursorDelegate.reset({scrollTop: options.scrollTop ?? 0});\n return;\n }\n this.reload({scrollTop: options.scrollTop ?? 0});\n },\n reload(options = {}): void {\n if (cursorDelegate) {\n cursorDelegate.reload(options);\n return;\n }\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,2 +0,0 @@
1
- import{o as e}from"./bridge-B4S_D6hV.js";import{t}from"./capability-motion-DoZROkFD.js";import{c as n,f as r,l as i,n as a,s as o,u as s}from"./codecs-Cb1ns_47.js";import{n as c,r as l,s as u,t as d}from"./dom-qAeVl7dc.js";import{i as f,t as p}from"./alpine-machine-BS13dbK4.js";import{t as m}from"./alpine-data-CytyCyfk.js";import{n as ee}from"./anchored-popover-BXEMsLrA.js";import{n as te,t as h}from"./styles-TfvwVPGw.js";import{t as ne}from"./merge-bindings-C8ewA_FD.js";import{t as g}from"./machine-Dqut4h89.js";import{n as _,t as v}from"./props-change-2xfsIAEN.js";import{t as re}from"./dismissable-layer-BROE-Ln2.js";import{i as y,n as ie,r as ae,t as oe}from"./form-control-BkVb2Qed.js";import{F as b,I as x,N as S,R as C,a as w,d as se,f as T,h as E,i as D,m as ce,p as O,r as k,t as A}from"./common-Dfj6NCjU.js";var j=null,M=t=>{typeof customElements>`u`||customElements.get(`calendar-date`)||(j??=e(()=>import(`./cally-Z6G-rzr-.js`),[]))},N=[`single`,`range`],P=[`enhanced`,`native`],F=[`auto`,`confirm`],I=[`neutral`,`accent`],L=k,R=[`left`,`right`,`top`,`bottom`],z=C,B=se,V={name:r,value:r,startName:r,endName:r,mode:i(N,`single`),placeholder:r,min:r,max:r,today:r,openTo:r,forceOpenTo:a,months:n.clamp(0,12).default(0),firstDayOfWeek:n.clamp(-1,6).default(0),locale:r,format:r.default(`%Y-%m-%d`),rangeSeparator:r.default(`/`),showOutsideDays:a,showWeekNumbers:a,fixedWeeks:a.default(!0),selectableHeader:a,withToday:a,clearable:a,disabled:a,readonly:a,required:a,invalid:a,side:i(x,`bottom`),align:i(A,`start`),offset:n.clamp(-100,100).default(0),gap:n.clamp(0,50).default(4),variant:i(P,`enhanced`),color:i(I,`neutral`),radius:i(L,`md`),surface:i(z,`+2`),elevation:i(B,`3`),close:i(F,`auto`),presets:o.array([]),presetsPosition:i(R,`left`),preset:r,presetName:r,triggerClass:r,inputClass:r,popoverClass:r,calendarClass:r,presetsClass:r,presetClass:r,class:r,form:r};i(R,`left`);var le=[f({name:`opening`,state:`disclosure.opening`,project:()=>({}),onDone:`OPENING_DONE`,onError:`OPENING_ERROR`,sends:{close:()=>({type:`CLOSE`})}}),f({name:`closing`,state:`disclosure.closing`,project:()=>({}),onDone:`CLOSING_DONE`,onError:`CLOSING_ERROR`,sends:{open:()=>({type:`OPEN`})}}),f({name:`parsing`,state:`feature.parsing`,project:e=>({input:e.context.input.value}),onDone:`PARSING_DONE`,onError:`PARSING_ERROR`,sends:{select:e=>({type:`SELECT`,value:e,source:`input`}),clear:()=>({type:`CLEAR`})}}),f({name:`selecting`,state:`feature.selecting`,project:e=>({value:e.context.selection.value,previousValue:e.context.selection.previousValue,source:e.context.selection.source,preset:e.context.preset.value}),onDone:`SELECTING_DONE`,onError:`SELECTING_ERROR`,sends:{select:e=>({type:`SELECT`,value:e,source:`input`}),clear:()=>({type:`CLEAR`}),close:()=>({type:`CLOSE`})}})],H=e=>_(e)?.props??null,U=e=>e.disabled||e.readonly,W=(e,t)=>typeof e[t]==`string`?e[t]:``,ue=e=>{let t=W(e,`source`);return t===`calendar`||t===`input`||t===`preset`||t===`today`||t===`props`?t:`clear`},de=({event:e})=>{let t=H(e);return!!(t&&(v(e,`disabled`)&&t.disabled||v(e,`readonly`)&&t.readonly))},fe=({props:e})=>e.close===`auto`,G=(e,t,n)=>({...e,selection:{value:n,pendingValue:n,previousValue:e.selection.value,source:ue(t)},input:{value:W(t,`input`),valid:!0},preset:{value:W(t,`preset`)}}),pe=({props:e,context:t,effects:n})=>g({type:`parallel`,states:{disclosure:{initial:`closed`,states:{closed:{tags:[`closed`],on:{OPEN:{target:`opening`,guard:`canOpen`,reduce:`beginOpen`,effects:`prepareOpen`},TOGGLE:{target:`opening`,guard:`canOpen`,reduce:`beginOpen`,effects:`prepareOpen`}}},opening:{tags:[`visible`,`expanded`,`interactive`,`transitioning`],on:{OPENING_DONE:{target:`open`,effects:`finishOpen`},OPENING_ERROR:{target:`open`,effects:`finishOpen`},CLOSE:{target:`closing`,effects:`prepareClose`},TOGGLE:{target:`closing`,effects:`prepareClose`},SELECT:{target:`closing`,guard:fe,effects:`prepareClose`},APPLY:{target:`closing`,effects:`prepareClose`},PROPS_CHANGED:{target:`closing`,guard:de,effects:`prepareClose`}}},open:{tags:[`visible`,`expanded`,`interactive`,`open`],on:{CLOSE:{target:`closing`,effects:`prepareClose`},TOGGLE:{target:`closing`,effects:`prepareClose`},SELECT:{target:`closing`,guard:fe,effects:`prepareClose`},APPLY:{target:`closing`,effects:`prepareClose`},PROPS_CHANGED:{target:`closing`,guard:de,effects:`prepareClose`}}},closing:{tags:[`visible`,`transitioning`],on:{CLOSING_DONE:{target:`closed`,effects:`finishClose`},CLOSING_ERROR:{target:`closed`,effects:`finishClose`},OPEN:{target:`opening`,guard:`canOpen`,reduce:`beginOpen`,effects:`prepareOpen`},TOGGLE:{target:`opening`,guard:`canOpen`,reduce:`beginOpen`,effects:`prepareOpen`}}}}},feature:{initial:`idle`,states:{idle:{on:{INPUT:{target:`editing`,reduce:`setInput`,effects:`syncInput`},PENDING:{target:`editing`,reduce:`setPending`,effects:`syncPending`},PARSE:{target:`parsing`,reduce:`setInvalidInput`,effects:`markInvalid`},SELECT:{target:`selecting`,reduce:`select`,effects:`commitSelection`},CLEAR:{target:`selecting`,reduce:`clear`,effects:`commitSelection`},APPLY:{target:`selecting`,reduce:`apply`,effects:`commitSelection`},PROPS_CHANGED:[{target:`selecting`,guard:`valueChanged`,reduce:`replaceProps`,effects:`commitSelection`},{reduce:`replaceProps`,effects:`syncProps`}],PRESETS_CHANGED:{effects:`syncPresets`}}},editing:{tags:[`editing`],on:{INPUT:{target:`editing`,reduce:`setInput`,effects:`syncInput`},PENDING:{target:`editing`,reduce:`setPending`,effects:`syncPending`},PARSE:{target:`parsing`,reduce:`setInvalidInput`,effects:`markInvalid`},SELECT:{target:`selecting`,reduce:`select`,effects:`commitSelection`},CLEAR:{target:`selecting`,reduce:`clear`,effects:`commitSelection`},APPLY:{target:`selecting`,reduce:`apply`,effects:`commitSelection`},CANCEL:{target:`idle`,reduce:`resetDraft`,effects:`syncPending`},CLOSE:{target:`idle`,reduce:`resetDraft`,effects:`syncPending`},PROPS_CHANGED:[{target:`selecting`,guard:`valueChanged`,reduce:`replaceProps`,effects:`commitSelection`},{reduce:`replaceProps`,effects:`syncProps`}],PRESETS_CHANGED:{effects:`syncPresets`}}},parsing:{tags:[`editing`,`parsing`],on:{SELECT:{target:`selecting`,reduce:`select`,effects:`commitSelection`},CLEAR:{target:`selecting`,reduce:`clear`,effects:`commitSelection`},APPLY:{target:`selecting`,reduce:`apply`,effects:`commitSelection`},INPUT:{target:`editing`,reduce:`setInput`,effects:`syncInput`},PARSING_DONE:`editing`,PARSING_ERROR:`editing`,CLOSE:{target:`idle`,reduce:`resetDraft`,effects:`syncPending`},PROPS_CHANGED:[{target:`selecting`,guard:`valueChanged`,reduce:`replaceProps`,effects:`commitSelection`},{target:`editing`,reduce:`replaceProps`,effects:`syncProps`}]}},selecting:{tags:[`selecting`],on:{SELECT:{target:`selecting`,reduce:`select`,effects:`commitSelection`},CLEAR:{target:`selecting`,reduce:`clear`,effects:`commitSelection`},APPLY:{target:`selecting`,reduce:`apply`,effects:`commitSelection`},SELECTING_DONE:`idle`,SELECTING_ERROR:`idle`,PROPS_CHANGED:[{target:`selecting`,guard:`valueChanged`,reduce:`replaceProps`,effects:`commitSelection`},{reduce:`replaceProps`,effects:`syncProps`}],PRESETS_CHANGED:{effects:`syncPresets`}}}}}}},{context:t,props:e,reducers:{beginOpen:({context:e})=>({context:{...e,selection:{...e.selection,pendingValue:e.selection.value}}}),setInput:({context:e,event:t})=>({context:{...e,input:{value:W(t,`input`),valid:!0}}}),setInvalidInput:({context:e,event:t})=>({context:{...e,input:{value:W(t,`input`),valid:!1}}}),setPending:({context:e,event:t})=>({context:{...e,selection:{...e.selection,pendingValue:W(t,`value`),source:ue(t)},preset:{value:W(t,`preset`)}}}),select:({context:e,event:t})=>({context:G(e,t,W(t,`value`))}),clear:({context:e})=>({context:G(e,{type:`CLEAR`},``)}),apply:({context:e})=>({context:G(e,{type:`SELECT`,source:e.selection.source},e.selection.pendingValue)}),resetDraft:({context:e})=>({context:{...e,selection:{...e.selection,pendingValue:e.selection.value},input:{value:``,valid:!0}}}),replaceProps:({context:e,event:t})=>{let n=H(t);if(n)return v(t,`value`)?{props:n,context:G(e,{type:`PROPS_CHANGED`,source:`props`},n.value)}:{props:n}}},guards:{canOpen:({props:e})=>!U(e),valueChanged:({event:e})=>v(e,`value`)},effects:{prepareOpen:n.prepareOpen,finishOpen:n.finishOpen,prepareClose:n.prepareClose,finishClose:n.finishClose,syncInput:n.syncInput,syncPending:n.syncPending,markInvalid:n.markInvalid,commitSelection:n.commitSelection,syncProps:n.syncProps,syncPresets:n.syncPresets}}),me=h({definition:{component:`ui.date-picker`,parts:{root:{base:`relative inline-grid w-full min-w-0`},trigger:{base:[E,D.lg,`text-left`],variants:{radius:w},defaults:{radius:`md`}},customTrigger:{base:[`inline-flex min-h-control-lg min-w-control-lg shrink-0 items-center justify-center gap-control-gap px-2 text-sm outline-none`],variants:{radius:w},defaults:{radius:`md`}},input:{base:[`min-w-0 flex-1 text-sm`,O]},icon:{base:`size-icon shrink-0 fill-current text-surface-ink-muted`},action:{base:T},popover:{base:[b,`max-h-lg overflow-hidden rounded-overlay-sm`]},panel:{base:`grid min-w-72 max-w-[calc(100vw-2rem)] gap-0 overflow-hidden`,variants:{hasPresets:{true:``,false:``},presetsPosition:{left:``,right:``,top:``,bottom:``}},compounds:[{when:{hasPresets:!0,presetsPosition:`left`},class:`sm:grid-cols-[minmax(9rem,11rem)_auto]`},{when:{hasPresets:!0,presetsPosition:`right`},class:`sm:grid-cols-[auto_minmax(9rem,11rem)]`}],defaults:{hasPresets:!1,presetsPosition:`left`}},calendarWrap:{base:`relative grid size-full place-items-center overflow-x-auto overflow-y-auto p-popover-padding`},calendar:{base:`grid max-w-full gap-2 text-sm`},presets:{base:[`grid content-start gap-1 p-popover-padding`]},preset:{base:S},footer:{base:`flex items-center justify-end gap-2 p-popover-padding`},nativeWrapper:{base:`relative w-full min-w-0`},native:{base:[ce,D.lg],variants:{radius:w},defaults:{radius:`md`}}}}}),K=/^\d{4}-\d{2}-\d{2}$/,q=/^\d{4}-\d{2}-\d{2}\/\d{4}-\d{2}-\d{2}$/,he=/%[Ymd]/g,ge=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),J=e=>{let t=0,n=``;for(let r of e.matchAll(/[\s/-]+/g))n+=ge(e.slice(t,r.index)),n+=`(?:\\s|[/-])+`,t=(r.index??0)+r[0].length;return n+ge(e.slice(t))},_e=e=>{let t=[],n=0,r=``;for(let i of e.matchAll(he)){r+=J(e.slice(n,i.index));let a=i[0];t.push(a),r+=a===`%Y`?`(\\d{4})`:`(\\d{2})`,n=(i.index??0)+a.length}return r+=J(e.slice(n)),{source:r,tokens:t}},Y=(e,t)=>{let n=Object.fromEntries(t.map((t,n)=>[t,e[n]??``])),r=Number(n[`%Y`]),i=Number(n[`%m`]),a=Number(n[`%d`]);if(!r||!i||!a||new Set(t).size!==3)return null;let o=new Date(Date.UTC(r,i-1,a));return o.getUTCFullYear()!==r||o.getUTCMonth()!==i-1||o.getUTCDate()!==a?null:`${String(r).padStart(4,`0`)}-${String(i).padStart(2,`0`)}-${String(a).padStart(2,`0`)}`},ve=({input:e,format:t,range:n,separator:r})=>{let i=_e(t);if(!n){let t=e.trim().match(RegExp(`^${i.source}$`));return t?Y(t.slice(1),i.tokens):null}let a=e.trim().match(RegExp(`^${i.source}${J(r)}${i.source}$`));if(!a)return null;let o=i.tokens.length,s=Y(a.slice(1,o+1),i.tokens),c=Y(a.slice(o+1),i.tokens);return s&&c&&s<=c?`${s}/${c}`:null},X=(e,t)=>{if(!K.test(e))return e;let[n=``,r=``,i=``]=e.split(`-`);return t.replaceAll(`%Y`,n).replaceAll(`%m`,r).replaceAll(`%d`,i)},ye=e=>e.replaceAll(`%Y`,`YYYY`).replaceAll(`%m`,`MM`).replaceAll(`%d`,`DD`),be=({input:e,format:t,separator:n})=>{let r=new Set(`${t.replace(he,``)}${n}`);return Array.from(e).filter(e=>/[0-9]/.test(e)||/[\s/-]/.test(e)||r.has(e)).join(``)},xe=({input:e,format:t,range:n,separator:r})=>{let i=t.replaceAll(`%Y`,`9999`).replaceAll(`%m`,`99`).replaceAll(`%d`,`99`),a=n?`${i}${r}${i}`:i,o=e.match(/[0-9]/g)??[],s=0,c=``;for(let e=0;e<a.length;e+=1){let t=a[e]??``;if(t===`9`){let e=o[s];if(e===void 0)break;c+=e,s+=1;continue}s>0&&a.slice(e+1).includes(`9`)&&(c+=t)}return c},Se=({value:e,format:t,range:n,separator:r})=>{if(!e)return``;if(!n)return X(e,t);if(!q.test(e))return e;let[i=``,a=``]=e.split(`/`);return`${X(i,t)}${r}${X(a,t)}`},Ce=(e,t,n)=>(q.test(e)?e.split(`/`):[e]).every(e=>K.test(e)&&(!t||e>=t)&&(!n||e<=n)),we=100,Te=10,Z=e=>{let[t=``,n=``]=e.split(`/`);return[t,n]},Ee=()=>new Date().getFullYear(),De=()=>`${Ee()-we}-01-01`,Oe=()=>`${Ee()+Te}-12-31`,Q=()=>new Date().toISOString().slice(0,10),ke=(e,t)=>K.test(e)?new Intl.DateTimeFormat(t||void 0,{month:`long`,timeZone:`UTC`,year:`numeric`}).format(new Date(`${e}T00:00:00.000Z`)):``,Ae=e=>({value:e.dataset.value??``,label:e.dataset.label??e.textContent?.trim()??``,start:e.dataset.start??``,end:e.dataset.end??``,disabled:c({value:e.dataset.disabled})}),je=()=>{let e=null,t=``,n=``,r=null,i=[],a=``,o=``,c=``,f=``,m=!1,h=()=>{if(!e)throw Error(`Date picker has not been initialized.`);return e},g=()=>H.getCommittedSnapshot().props,_=()=>H.getCommittedSnapshot().context,v=()=>{let e=h().querySelector(`[data-ui-date-picker-trigger]`);if(!e)throw Error(`Date picker requires a trigger.`);return e},b=()=>{let e=h().querySelector(`[data-ui-date-picker-input]`);if(!e)throw Error(`Date picker requires an input.`);return e},x=()=>h().querySelector(`[data-ui-date-picker-toggle]`),S=()=>{let e=h().querySelector(`[data-ui-date-picker-popover]`);if(!e)throw Error(`Date picker requires a popover.`);return e},C=()=>h().querySelector(`[data-ui-date-picker-calendar]`),w=()=>h().querySelector(`[data-ui-date-picker-hidden-inputs]`),se=()=>h().querySelector(`[data-ui-date-picker-preset-inputs]`),T=()=>g().mode===`range`,E=()=>g().months||(T()?2:1),D=()=>{let e=Array.from(h().querySelectorAll(`[data-ui-date-picker-preset]`)).map(Ae).filter(e=>e.value&&e.start&&e.end);return e.length?e:g().presets},ce=e=>Se({value:e,format:g().format,range:T(),separator:g().rangeSeparator}),O=e=>{let t=D().find(t=>(T()?`${t.start}/${t.end}`:t.start)===e),n=D().find(e=>e.value===`custom`);return t?.value??(e&&n?`custom`:``)},k=e=>{let t=h().querySelector(`[data-ui-date-picker-calendar-heading]`);if(!t)return;let n=g();t.textContent=ke(e||Z(_().selection.value||n.openTo||n.today||Q())[0],n.locale)},A=()=>{let e=C();if(!e)return;let t=g(),n=_(),r=n.selection.pendingValue;customElements.get(`calendar-date`)&&(e.value=r),e.setAttribute(`value`,r),u({el:e,attr:`tentative`,present:T()&&!!r&&!q.test(r)}),e.setAttribute(`months`,String(E())),e.style.setProperty(`--ui-date-picker-month-columns`,String(E())),e.setAttribute(`min`,t.min||De()),e.setAttribute(`max`,t.max||Oe()),t.today?e.setAttribute(`today`,t.today):e.removeAttribute(`today`);let i=t.forceOpenTo?t.openTo:n.selection.value||t.openTo||t.today||Q();e.setAttribute(`focused-date`,Z(i)[0]),t.locale?e.setAttribute(`locale`,t.locale):e.removeAttribute(`locale`),t.firstDayOfWeek>=0&&e.setAttribute(`first-day-of-week`,String(t.firstDayOfWeek));let a=!t.selectableHeader&&E()===1;u({el:e,attr:`data-inline-heading`,present:a,value:`true`}),u({el:e,attr:`data-hide-month-heading`,present:t.selectableHeader&&!T()||a,value:`true`}),u({el:e,attr:`data-fixed-weeks`,present:t.fixedWeeks,value:`true`}),u({el:e,attr:`show-outside-days`,present:t.showOutsideDays||t.fixedWeeks}),u({el:e,attr:`show-week-numbers`,present:t.showWeekNumbers})},j=()=>{let e=_().selection.pendingValue||_().selection.value;h().querySelectorAll(`[data-ui-date-picker-preset]`).forEach(t=>{let n=Ae(t);u({el:t,attr:`data-selected`,present:(T()?`${n.start}/${n.end}`:n.start)===e,value:`true`}),u({el:t,attr:`data-disabled`,present:n.disabled??!1,value:`true`})})},M=()=>{let e=w();if(!e)return;let t=g(),n=_().selection.value;if(!T()){a=y({container:e,currentKey:a,state:{name:t.name,values:n?[n]:[],required:t.required,form:t.form,marker:`data-ui-date-picker-hidden-input`}});return}let[r,i]=Z(n);if(t.startName||t.endName){let n=JSON.stringify({startName:t.startName,endName:t.endName,start:r,end:i,form:t.form});if(n===a)return;e.replaceChildren(),[[t.startName,r],[t.endName,i]].forEach(([n,r])=>{if(!n)return;let i=document.createElement(`input`);i.type=`hidden`,i.name=n,i.value=r??``,i.setAttribute(`data-ui-date-picker-hidden-input`,``),t.form&&i.setAttribute(`form`,t.form),e.append(i)}),a=n;return}a=y({container:e,currentKey:a,state:{name:t.name,values:n?[n]:[],required:t.required,form:t.form,marker:`data-ui-date-picker-hidden-input`}})},N=()=>{let e=se();if(!e)return;let t=g(),n=O(_().selection.value);o=y({container:e,currentKey:o,state:{name:t.presetName,values:n?[n]:[],form:t.form,marker:`data-ui-date-picker-preset-input`}})},P=()=>{let e=g(),r=_(),i=H.hasTag(`visible`),a=H.hasTag(`expanded`),o=v(),s=b(),l=S();o.id=t,l.id=n,l.dataset.state=a?`open`:`closed`,l.hidden=!i,o.dataset.state=a?`open`:`closed`,ie({el:o,state:e,value:`true`});let u=x()??o;u.setAttribute(`aria-haspopup`,`dialog`),u.setAttribute(`aria-expanded`,a?`true`:`false`),u.setAttribute(`aria-controls`,n),o instanceof HTMLButtonElement&&(o.disabled=e.disabled);let d=H.hasTag(`editing`)?r.input.value:ce(r.selection.value);ae({input:s,state:{name:``,value:d,disabled:e.disabled,readonly:e.readonly,required:e.required&&e.mode===`single`,invalid:e.invalid||!r.input.valid}}),s.placeholder=U.effectivePlaceholder(),h().querySelectorAll(`[data-ui-date-picker-clear], [data-ui-date-picker-toggle]`).forEach(t=>{t.disabled=e.disabled}),f=d;let p=h().querySelector(`[data-ui-date-picker-live]`);p&&(p.textContent=c)},F=()=>{let e=h().querySelector(`[data-ui-date-picker-calendar-today]`),t=h().querySelector(`[data-ui-date-picker-today-day]`);if(!e||!t)return;let n=g().today||Q(),r=K.test(n)?String(Number(n.slice(-2))):``;t.textContent=r,e.setAttribute(`aria-label`,r?`Go to today, ${n}`:`Go to today`)},I=()=>{let e=g(),t=S();t.dataset.uiSurface=e.surface,t.dataset.uiElevation=e.elevation},L=()=>{s({el:h(),schema:V,key:`value`,value:_().selection.value}),P(),A(),k(),F(),I(),M(),N(),j(),H.hasTag(`visible`)&&r?.sync()},R=()=>{oe({container:w(),fallback:h(),marker:`data-ui-date-picker-hidden-input`}),l({el:h(),name:`ui:change`})},z=(e,t,n=``)=>{g().disabled||g().readonly||H.send({type:`SELECT`,value:e,source:t,preset:n})},B=e=>{let t=g(),n=ve({input:e,format:t.format,range:T(),separator:t.rangeSeparator});return n&&Ce(n,t.min,t.max)?n:null},H=p({schema:V,hooks:le,createMachine:({props:e})=>pe({props:e,context:{selection:{value:e.value,pendingValue:e.value,previousValue:e.value,source:`props`},input:{value:``,valid:!0},preset:{value:e.preset}},effects:{prepareOpen:()=>{let e=S();e.hidden=!1,r?.open(),L()},finishOpen:()=>{m&&C()?.focus({preventScroll:!0}),m=!1,l({el:h(),name:`ui:open`})},prepareClose:L,finishClose:()=>{let e=S();r?.close(),e.hidden=!0,m&&v().focus({preventScroll:!0}),m=!1,L(),l({el:h(),name:`ui:close`})},syncInput:P,syncPending:()=>{P(),A(),j()},markInvalid:()=>{b().setCustomValidity(`Enter a date in ${g().format}`),P(),l({el:h(),name:`ui:invalid`})},commitSelection:()=>{b().setCustomValidity(``);let e=_();c=e.selection.value?T()?`Range selected`:`Date selected`:`Date cleared`,L(),R(),l({el:h(),name:e.selection.value?`ui:select`:`ui:clear`})},syncProps:L,syncPresets:()=>{j(),N()}}}),resolveTransitionElement:({name:e,root:t})=>e===`opening`||e===`closing`?t.querySelector(`[data-ui-date-picker-popover]`):e===`parsing`?t.querySelector(`[data-ui-date-picker-input]`):t}),U;return U={...H,get isOpen(){return H.hasTag(`expanded`)},get isEditing(){return H.hasTag(`editing`)},get value(){return H.getCommittedSnapshot().context.selection.value},get pendingValue(){return H.getCommittedSnapshot().context.selection.pendingValue},get preset(){return O(H.getCommittedSnapshot().context.selection.value)},get root(){return ne({inputs:[te({part:me.parts.root,props:H.getCommittedSnapshot().props,className:H.getCommittedSnapshot().props.class}),{"data-ui-date-picker":``,":data-state":()=>U.isOpen?`open`:`closed`}]})},effectivePlaceholder(){let e=H.getCommittedSnapshot().props;if(e.placeholder)return e.placeholder;let t=ye(e.format);return e.mode===`range`?`${t}${e.rangeSeparator}${t}`:t},open(e){e?.preventDefault(),e instanceof KeyboardEvent&&(m=!0),H.send(`OPEN`)},close(e){e?.preventDefault(),e instanceof KeyboardEvent&&(m=!0),H.send(`CLOSE`)},toggle(e){e?.preventDefault(),H.send(`TOGGLE`)},select(e,t){t?.preventDefault(),Ce(e,g().min,g().max)&&(T()?q.test(e):K.test(e))&&z(e,`input`)},selectPreset(e,t){if(t?.preventDefault(),g().disabled||g().readonly)return;let n=D().find(t=>t.value===e);if(!n||n.disabled)return;let r=T()?`${n.start}/${n.end}`:n.start;g().close===`confirm`?H.send({type:`PENDING`,value:r,source:`preset`,preset:e}):z(r,`preset`,e)},selectToday(e){if(e?.preventDefault(),g().disabled||g().readonly)return;let t=g().today||Q(),n=T()?`${t}/${t}`:t;g().close===`confirm`?H.send({type:`PENDING`,value:n,source:`today`}):z(n,`today`)},clear(e){e?.preventDefault(),!(g().disabled||g().readonly)&&H.send(`CLEAR`)},cancel(e){e?.preventDefault(),H.send(`CANCEL`),H.send(`CLOSE`)},init(){e=this.$el,t=this.$id(`date-picker-trigger`),n=this.$id(`date-picker-popover`),H.connect(this.$el,this.snapshot),r=ee({reference:v,floating:S,position:()=>g().side,align:()=>g().align,gap:()=>g().gap,offset:()=>g().offset,matchReferenceWidth:!1});let a=v(),o=b(),s=S();d({target:a,event:`click`,cleanup:i,handler:e=>{let t=e.target;t instanceof Element&&t.closest(`[data-ui-date-picker-clear]`)?U.clear(e):U.toggle(e)}}),d({target:a,event:`keydown`,cleanup:i,handler:e=>{let t=e;(t.key===`ArrowDown`||t.key===`Enter`||t.key===` `)&&!U.isOpen?U.open(t):t.key===`Escape`&&U.isOpen&&U.close(t)}}),d({target:h(),event:`keydown`,cleanup:i,handler:e=>{let t=e;t.key===`Escape`&&U.isOpen&&U.close(t)}}),d({target:o,event:`input`,cleanup:i,handler:()=>{let e=o.selectionStart??o.value.length,t=(o.value.slice(0,e).match(/[0-9]/g)??[]).length,n=be({input:o.value,format:g().format,separator:g().rangeSeparator});if(f.length-n.length!==1&&(n=xe({input:n,format:g().format,range:T(),separator:g().rangeSeparator})),o.value!==n){o.value=n;let e=0,r=n.length;for(let i=0;i<n.length;i+=1)if(/[0-9]/.test(n[i]??``)&&(e+=1),e===t){for(r=i+1;r<n.length&&!/[0-9]/.test(n[r]??``);)r+=1;break}o.setSelectionRange(r,r)}f=n,H.send({type:`INPUT`,input:n});let r=B(n);r&&z(r,`input`)}}),d({target:o,event:`change`,cleanup:i,handler:()=>{let e=B(o.value);e?z(e,`input`):o.value.trim()?H.send({type:`PARSE`,input:o.value}):H.send(`CLEAR`)}}),d({target:s,event:`pointerdown`,cleanup:i,handler:e=>e.stopPropagation()}),d({target:s,event:`click`,cleanup:i,handler:e=>{let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`[data-ui-date-picker-preset]`);n?U.selectPreset(n.dataset.value??``,e):t.closest(`[data-ui-date-picker-clear]`)?U.clear(e):t.closest(`[data-ui-date-picker-cancel]`)?U.cancel(e):t.closest(`[data-ui-date-picker-apply]`)?H.send(`APPLY`):t.closest(`[data-ui-date-picker-today]`)&&U.selectToday(e)}});let l=C();l&&(customElements.whenDefined(`calendar-date`).then(()=>{e&&A()}),d({target:l,event:`change`,cleanup:i,handler:()=>{let e=l.value;T()&&!q.test(e)?(c=`Start date selected`,H.send({type:`PENDING`,value:e,source:`calendar`})):g().close===`confirm`?H.send({type:`PENDING`,value:e,source:`calendar`}):z(e,`calendar`)}}),d({target:l,event:`focusday`,cleanup:i,handler:e=>{let t=e.detail;t instanceof Date&&k(t.toISOString().slice(0,10))}})),i.push(re({isEnabled:()=>U.isOpen,roots:()=>[h(),s],onDismiss:()=>U.close()}));let u=new MutationObserver(()=>H.send(`PRESETS_CHANGED`));u.observe(h(),{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`data-value`,`data-start`,`data-end`,`data-disabled`]}),i.push(()=>u.disconnect()),L()},destroy(){i.forEach(e=>e()),i=[],r?.destroy(),r=null,H.disconnect(),e=null}},U},Me=m(`UiDatePicker`,je),$=new WeakSet,Ne=e=>{$.has(e)||($.add(e),t(e),M(e),Me(e))};export{je as n,Ne as t};
2
- //# sourceMappingURL=entry.generated-B-wVMxe6.js.map
@@ -1 +0,0 @@
1
- {"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../../../../../client/src/capabilities/calendar.ts","../../../../../../../../client/src/components/date-picker/contract.ts","../../../../../../../../client/src/components/date-picker/machine.ts","../../../../../../../../client/src/components/date-picker/styles.ts","../../../../../../../../client/src/components/date-picker/value.ts","../../../../../../../../client/src/components/date-picker/index.ts","../../../../../../../../client/src/components/date-picker/entry.generated.ts"],"sourcesContent":["import type {Alpine as AlpineType} from 'alpinejs';\n\nlet registration: Promise<unknown> | null = null;\n\nconst registerCalendarCapability = (_AlpineInstance: AlpineType): void => {\n if (typeof customElements === 'undefined' || customElements.get('calendar-date')) return;\n registration ??= import('cally');\n};\n\nexport {registerCalendarCapability};\n","import {bool, json, number, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {\n ALIGNMENTS,\n COMPONENT_RADII,\n ELEVATION_REFERENCES,\n POSITIONS,\n SURFACE_REFERENCES,\n type Alignment,\n type ComponentRadius,\n type ElevationReference,\n type Position,\n type SurfaceReference,\n} from '../common';\n\nconst DATE_PICKER_MODES = ['single', 'range'] as const;\nconst DATE_PICKER_VARIANTS = ['enhanced', 'native'] as const;\nconst DATE_PICKER_CLOSE = ['auto', 'confirm'] as const;\nconst DATE_PICKER_COLORS = ['neutral', 'accent'] as const;\nconst DATE_PICKER_RADII = COMPONENT_RADII;\nconst DATE_PICKER_PRESETS_POSITIONS = ['left', 'right', 'top', 'bottom'] as const;\nconst DATE_PICKER_SURFACES = SURFACE_REFERENCES;\nconst DATE_PICKER_ELEVATIONS = ELEVATION_REFERENCES;\n\ntype DatePickerMode = typeof DATE_PICKER_MODES[number];\ntype DatePickerVariant = typeof DATE_PICKER_VARIANTS[number];\ntype DatePickerClose = typeof DATE_PICKER_CLOSE[number];\ntype DatePickerColor = typeof DATE_PICKER_COLORS[number];\ntype DatePickerRadius = ComponentRadius;\ntype DatePickerPresetsPosition = typeof DATE_PICKER_PRESETS_POSITIONS[number];\ntype DatePickerSide = Position;\ntype DatePickerAlign = Alignment;\ntype DatePickerSurface = SurfaceReference;\ntype DatePickerElevation = ElevationReference;\n\ntype DatePickerPreset = {\n value: string;\n label: string;\n start: string;\n end: string;\n disabled?: boolean;\n};\n\nconst datePickerSchema = {\n name: string,\n value: string,\n startName: string,\n endName: string,\n mode: oneOf(DATE_PICKER_MODES, 'single' as DatePickerMode),\n placeholder: string,\n min: string,\n max: string,\n today: string,\n openTo: string,\n forceOpenTo: bool,\n months: number.clamp(0, 12).default(0),\n firstDayOfWeek: number.clamp(-1, 6).default(0),\n locale: string,\n format: string.default('%Y-%m-%d'),\n rangeSeparator: string.default('/'),\n showOutsideDays: bool,\n showWeekNumbers: bool,\n fixedWeeks: bool.default(true),\n selectableHeader: bool,\n withToday: bool,\n clearable: bool,\n disabled: bool,\n readonly: bool,\n required: bool,\n invalid: bool,\n side: oneOf(POSITIONS, 'bottom' as DatePickerSide),\n align: oneOf(ALIGNMENTS, 'start' as DatePickerAlign),\n offset: number.clamp(-100, 100).default(0),\n gap: number.clamp(0, 50).default(4),\n variant: oneOf(DATE_PICKER_VARIANTS, 'enhanced' as DatePickerVariant),\n color: oneOf(DATE_PICKER_COLORS, 'neutral' as DatePickerColor),\n radius: oneOf(DATE_PICKER_RADII, 'md' as DatePickerRadius),\n surface: oneOf(DATE_PICKER_SURFACES, '+2' as DatePickerSurface),\n elevation: oneOf(DATE_PICKER_ELEVATIONS, '3' as DatePickerElevation),\n close: oneOf(DATE_PICKER_CLOSE, 'auto' as DatePickerClose),\n presets: json.array<DatePickerPreset>([]),\n presetsPosition: oneOf(DATE_PICKER_PRESETS_POSITIONS, 'left' as DatePickerPresetsPosition),\n preset: string,\n presetName: string,\n triggerClass: string,\n inputClass: string,\n popoverClass: string,\n calendarClass: string,\n presetsClass: string,\n presetClass: string,\n class: string,\n form: string,\n};\n\nconst datePickerPresetSchema = {\n value: string,\n label: string,\n start: string,\n end: string,\n disabled: bool,\n class: string,\n};\n\nconst datePickerPresetsSchema = {\n position: oneOf(DATE_PICKER_PRESETS_POSITIONS, 'left' as DatePickerPresetsPosition),\n class: string,\n};\n\ntype DatePickerProps = SchemaToProps<typeof datePickerSchema>;\ntype DatePickerPresetProps = SchemaToProps<typeof datePickerPresetSchema>;\ntype DatePickerPresetsProps = SchemaToProps<typeof datePickerPresetsSchema>;\n\nexport {\n DATE_PICKER_CLOSE,\n DATE_PICKER_COLORS,\n DATE_PICKER_ELEVATIONS,\n DATE_PICKER_MODES,\n DATE_PICKER_PRESETS_POSITIONS,\n DATE_PICKER_RADII,\n DATE_PICKER_SURFACES,\n DATE_PICKER_VARIANTS,\n datePickerPresetSchema,\n datePickerPresetsSchema,\n datePickerSchema,\n};\nexport type {\n DatePickerAlign,\n DatePickerClose,\n DatePickerColor,\n DatePickerElevation,\n DatePickerMode,\n DatePickerPreset,\n DatePickerPresetProps,\n DatePickerPresetsPosition,\n DatePickerPresetsProps,\n DatePickerProps,\n DatePickerRadius,\n DatePickerSide,\n DatePickerSurface,\n DatePickerVariant,\n};\n","import {\n createMachine,\n propsChanged,\n propsChangedEvent,\n type Machine,\n type MachineEventObject,\n type MachineScope,\n} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {DatePickerProps} from './contract';\n\ntype SelectionSource = 'calendar' | 'input' | 'preset' | 'today' | 'clear' | 'props';\n\ntype DatePickerContext = {\n selection: {\n value: string;\n pendingValue: string;\n previousValue: string;\n source: SelectionSource;\n };\n input: {value: string; valid: boolean};\n preset: {value: string};\n};\n\ntype DatePickerMachineEffects = {\n prepareOpen(scope: MachineScope<DatePickerContext, DatePickerProps>): void;\n finishOpen(scope: MachineScope<DatePickerContext, DatePickerProps>): void;\n prepareClose(scope: MachineScope<DatePickerContext, DatePickerProps>): void;\n finishClose(scope: MachineScope<DatePickerContext, DatePickerProps>): void;\n syncInput(scope: MachineScope<DatePickerContext, DatePickerProps>): void;\n syncPending(scope: MachineScope<DatePickerContext, DatePickerProps>): void;\n markInvalid(scope: MachineScope<DatePickerContext, DatePickerProps>): void;\n commitSelection(scope: MachineScope<DatePickerContext, DatePickerProps>): void;\n syncProps(scope: MachineScope<DatePickerContext, DatePickerProps>): void;\n syncPresets(scope: MachineScope<DatePickerContext, DatePickerProps>): void;\n};\n\ntype CreateDatePickerMachineOptions = {\n props: DatePickerProps;\n context: DatePickerContext;\n effects: DatePickerMachineEffects;\n};\n\nconst openingHook = defineHook({\n name: 'opening',\n state: 'disclosure.opening',\n project: () => ({}),\n onDone: 'OPENING_DONE',\n onError: 'OPENING_ERROR',\n sends: {close: () => ({type: 'CLOSE'})},\n} satisfies TransitionHookDefinition<DatePickerContext, DatePickerProps, Record<string, never>, 'opening'>);\n\nconst closingHook = defineHook({\n name: 'closing',\n state: 'disclosure.closing',\n project: () => ({}),\n onDone: 'CLOSING_DONE',\n onError: 'CLOSING_ERROR',\n sends: {open: () => ({type: 'OPEN'})},\n} satisfies TransitionHookDefinition<DatePickerContext, DatePickerProps, Record<string, never>, 'closing'>);\n\nconst parsingHook = defineHook({\n name: 'parsing',\n state: 'feature.parsing',\n project: (snapshot) => ({input: snapshot.context.input.value}),\n onDone: 'PARSING_DONE',\n onError: 'PARSING_ERROR',\n sends: {\n select: (value: string) => ({type: 'SELECT', value, source: 'input'}),\n clear: () => ({type: 'CLEAR'}),\n },\n} satisfies TransitionHookDefinition<DatePickerContext, DatePickerProps, {input: string}, 'parsing'>);\n\nconst selectingHook = defineHook({\n name: 'selecting',\n state: 'feature.selecting',\n project: (snapshot) => ({\n value: snapshot.context.selection.value,\n previousValue: snapshot.context.selection.previousValue,\n source: snapshot.context.selection.source,\n preset: snapshot.context.preset.value,\n }),\n onDone: 'SELECTING_DONE',\n onError: 'SELECTING_ERROR',\n sends: {\n select: (value: string) => ({type: 'SELECT', value, source: 'input'}),\n clear: () => ({type: 'CLEAR'}),\n close: () => ({type: 'CLOSE'}),\n },\n} satisfies TransitionHookDefinition<DatePickerContext, DatePickerProps, {\n value: string;\n previousValue: string;\n source: SelectionSource;\n preset: string;\n}, 'selecting'>);\n\nconst datePickerHooks = [openingHook, closingHook, parsingHook, selectingHook] as const;\n\nconst nextProps = (event: MachineEventObject): DatePickerProps | null => propsChangedEvent<DatePickerProps>(event)?.props ?? null;\nconst blocked = (props: DatePickerProps): boolean => props.disabled || props.readonly;\nconst eventString = (event: MachineEventObject, key: string): string => (\n typeof event[key] === 'string' ? event[key] : ''\n);\nconst sourceFrom = (event: MachineEventObject): SelectionSource => {\n const source = eventString(event, 'source');\n return source === 'calendar' || source === 'input' || source === 'preset' || source === 'today' || source === 'props'\n ? source\n : 'clear';\n};\n\nconst shouldCloseFromProps = ({event}: MachineScope<DatePickerContext, DatePickerProps>): boolean => {\n const props = nextProps(event);\n return Boolean(props && (\n (propsChanged<DatePickerProps>(event, 'disabled') && props.disabled)\n || (propsChanged<DatePickerProps>(event, 'readonly') && props.readonly)\n ));\n};\n\nconst shouldAutoClose = ({props}: MachineScope<DatePickerContext, DatePickerProps>): boolean => props.close === 'auto';\n\nconst selectionUpdate = (\n context: DatePickerContext,\n event: MachineEventObject,\n value: string,\n): DatePickerContext => ({\n ...context,\n selection: {\n value,\n pendingValue: value,\n previousValue: context.selection.value,\n source: sourceFrom(event),\n },\n input: {value: eventString(event, 'input'), valid: true},\n preset: {value: eventString(event, 'preset')},\n});\n\nconst createDatePickerMachine = ({\n props,\n context,\n effects,\n}: CreateDatePickerMachineOptions): Machine<DatePickerContext, DatePickerProps> => createMachine({\n type: 'parallel',\n states: {\n disclosure: {\n initial: 'closed',\n states: {\n closed: {\n tags: ['closed'],\n on: {\n OPEN: {target: 'opening', guard: 'canOpen', reduce: 'beginOpen', effects: 'prepareOpen'},\n TOGGLE: {target: 'opening', guard: 'canOpen', reduce: 'beginOpen', effects: 'prepareOpen'},\n },\n },\n opening: {\n tags: ['visible', 'expanded', '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 TOGGLE: {target: 'closing', effects: 'prepareClose'},\n SELECT: {target: 'closing', guard: shouldAutoClose, effects: 'prepareClose'},\n APPLY: {target: 'closing', effects: 'prepareClose'},\n PROPS_CHANGED: {target: 'closing', guard: shouldCloseFromProps, effects: 'prepareClose'},\n },\n },\n open: {\n tags: ['visible', 'expanded', 'interactive', 'open'],\n on: {\n CLOSE: {target: 'closing', effects: 'prepareClose'},\n TOGGLE: {target: 'closing', effects: 'prepareClose'},\n SELECT: {target: 'closing', guard: shouldAutoClose, effects: 'prepareClose'},\n APPLY: {target: 'closing', effects: 'prepareClose'},\n PROPS_CHANGED: {target: 'closing', guard: shouldCloseFromProps, effects: 'prepareClose'},\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', reduce: 'beginOpen', effects: 'prepareOpen'},\n TOGGLE: {target: 'opening', guard: 'canOpen', reduce: 'beginOpen', effects: 'prepareOpen'},\n },\n },\n },\n },\n feature: {\n initial: 'idle',\n states: {\n idle: {\n on: {\n INPUT: {target: 'editing', reduce: 'setInput', effects: 'syncInput'},\n PENDING: {target: 'editing', reduce: 'setPending', effects: 'syncPending'},\n PARSE: {target: 'parsing', reduce: 'setInvalidInput', effects: 'markInvalid'},\n SELECT: {target: 'selecting', reduce: 'select', effects: 'commitSelection'},\n CLEAR: {target: 'selecting', reduce: 'clear', effects: 'commitSelection'},\n APPLY: {target: 'selecting', reduce: 'apply', effects: 'commitSelection'},\n PROPS_CHANGED: [\n {target: 'selecting', guard: 'valueChanged', reduce: 'replaceProps', effects: 'commitSelection'},\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n PRESETS_CHANGED: {effects: 'syncPresets'},\n },\n },\n editing: {\n tags: ['editing'],\n on: {\n INPUT: {target: 'editing', reduce: 'setInput', effects: 'syncInput'},\n PENDING: {target: 'editing', reduce: 'setPending', effects: 'syncPending'},\n PARSE: {target: 'parsing', reduce: 'setInvalidInput', effects: 'markInvalid'},\n SELECT: {target: 'selecting', reduce: 'select', effects: 'commitSelection'},\n CLEAR: {target: 'selecting', reduce: 'clear', effects: 'commitSelection'},\n APPLY: {target: 'selecting', reduce: 'apply', effects: 'commitSelection'},\n CANCEL: {target: 'idle', reduce: 'resetDraft', effects: 'syncPending'},\n CLOSE: {target: 'idle', reduce: 'resetDraft', effects: 'syncPending'},\n PROPS_CHANGED: [\n {target: 'selecting', guard: 'valueChanged', reduce: 'replaceProps', effects: 'commitSelection'},\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n PRESETS_CHANGED: {effects: 'syncPresets'},\n },\n },\n parsing: {\n tags: ['editing', 'parsing'],\n on: {\n SELECT: {target: 'selecting', reduce: 'select', effects: 'commitSelection'},\n CLEAR: {target: 'selecting', reduce: 'clear', effects: 'commitSelection'},\n APPLY: {target: 'selecting', reduce: 'apply', effects: 'commitSelection'},\n INPUT: {target: 'editing', reduce: 'setInput', effects: 'syncInput'},\n PARSING_DONE: 'editing',\n PARSING_ERROR: 'editing',\n CLOSE: {target: 'idle', reduce: 'resetDraft', effects: 'syncPending'},\n PROPS_CHANGED: [\n {target: 'selecting', guard: 'valueChanged', reduce: 'replaceProps', effects: 'commitSelection'},\n {target: 'editing', reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n selecting: {\n tags: ['selecting'],\n on: {\n SELECT: {target: 'selecting', reduce: 'select', effects: 'commitSelection'},\n CLEAR: {target: 'selecting', reduce: 'clear', effects: 'commitSelection'},\n APPLY: {target: 'selecting', reduce: 'apply', effects: 'commitSelection'},\n SELECTING_DONE: 'idle',\n SELECTING_ERROR: 'idle',\n PROPS_CHANGED: [\n {target: 'selecting', guard: 'valueChanged', reduce: 'replaceProps', effects: 'commitSelection'},\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n PRESETS_CHANGED: {effects: 'syncPresets'},\n },\n },\n },\n },\n },\n}, {\n context,\n props,\n reducers: {\n beginOpen: ({context: current}) => ({context: {\n ...current,\n selection: {...current.selection, pendingValue: current.selection.value},\n }}),\n setInput: ({context: current, event}) => ({context: {\n ...current,\n input: {value: eventString(event, 'input'), valid: true},\n }}),\n setInvalidInput: ({context: current, event}) => ({context: {\n ...current,\n input: {value: eventString(event, 'input'), valid: false},\n }}),\n setPending: ({context: current, event}) => ({context: {\n ...current,\n selection: {\n ...current.selection,\n pendingValue: eventString(event, 'value'),\n source: sourceFrom(event),\n },\n preset: {value: eventString(event, 'preset')},\n }}),\n select: ({context: current, event}) => ({context: selectionUpdate(\n current,\n event,\n eventString(event, 'value'),\n )}),\n clear: ({context: current}) => ({context: selectionUpdate(current, {type: 'CLEAR'}, '')}),\n apply: ({context: current}) => ({context: selectionUpdate(\n current,\n {type: 'SELECT', source: current.selection.source},\n current.selection.pendingValue,\n )}),\n resetDraft: ({context: current}) => ({context: {\n ...current,\n selection: {...current.selection, pendingValue: current.selection.value},\n input: {value: '', valid: true},\n }}),\n replaceProps: ({context: current, event}) => {\n const next = nextProps(event);\n if (!next) return undefined;\n if (!propsChanged<DatePickerProps>(event, 'value')) return {props: next};\n return {\n props: next,\n context: selectionUpdate(current, {type: 'PROPS_CHANGED', source: 'props'}, next.value),\n };\n },\n },\n guards: {\n canOpen: ({props: current}) => !blocked(current),\n valueChanged: ({event}) => propsChanged<DatePickerProps>(event, 'value'),\n },\n effects: {\n prepareOpen: effects.prepareOpen,\n finishOpen: effects.finishOpen,\n prepareClose: effects.prepareClose,\n finishClose: effects.finishClose,\n syncInput: effects.syncInput,\n syncPending: effects.syncPending,\n markInvalid: effects.markInvalid,\n commitSelection: effects.commitSelection,\n syncProps: effects.syncProps,\n syncPresets: effects.syncPresets,\n },\n});\n\nexport {createDatePickerMachine, datePickerHooks};\nexport type {\n CreateDatePickerMachineOptions,\n DatePickerContext,\n DatePickerMachineEffects,\n SelectionSource,\n};\n","import {defineStyles} from '../../runtime';\nimport {\n CONTROL_MIN_SIZE_CLASSES,\n CONTROL_RADIUS_CLASSES,\n FIELD_CONTROL_ACTION_CLASSES,\n FIELD_CONTROL_INPUT_CLASSES,\n FIELD_CONTROL_NATIVE_CLASSES,\n FIELD_CONTROL_ROOT_CLASSES,\n OPTION_ITEM_CLASSES,\n POPOVER_GEOMETRY_CLASSES,\n} from '../common';\n\nconst datePickerStyles = defineStyles({definition: {\n component: 'ui.date-picker',\n parts: {\n root: {\n base: 'relative inline-grid w-full min-w-0',\n },\n trigger: {\n base: [\n FIELD_CONTROL_ROOT_CLASSES,\n CONTROL_MIN_SIZE_CLASSES.lg,\n 'text-left',\n ],\n variants: {\n radius: CONTROL_RADIUS_CLASSES,\n },\n defaults: {\n radius: 'md',\n },\n },\n customTrigger: {\n base: [\n 'inline-flex min-h-control-lg min-w-control-lg shrink-0 items-center justify-center gap-control-gap px-2 text-sm outline-none',\n ],\n variants: {\n radius: CONTROL_RADIUS_CLASSES,\n },\n defaults: {\n radius: 'md',\n },\n },\n input: {\n base: [\n 'min-w-0 flex-1 text-sm',\n FIELD_CONTROL_INPUT_CLASSES,\n ],\n },\n icon: {\n base: 'size-icon shrink-0 fill-current text-surface-ink-muted',\n },\n action: {\n base: FIELD_CONTROL_ACTION_CLASSES,\n },\n popover: {\n base: [\n POPOVER_GEOMETRY_CLASSES,\n 'max-h-lg overflow-hidden rounded-overlay-sm',\n ],\n },\n panel: {\n base: 'grid min-w-72 max-w-[calc(100vw-2rem)] gap-0 overflow-hidden',\n variants: {\n hasPresets: {\n true: '',\n false: '',\n },\n presetsPosition: {\n left: '',\n right: '',\n top: '',\n bottom: '',\n },\n },\n compounds: [\n {when: {hasPresets: true, presetsPosition: 'left'}, class: 'sm:grid-cols-[minmax(9rem,11rem)_auto]'},\n {when: {hasPresets: true, presetsPosition: 'right'}, class: 'sm:grid-cols-[auto_minmax(9rem,11rem)]'},\n ],\n defaults: {\n hasPresets: false,\n presetsPosition: 'left',\n },\n },\n calendarWrap: {\n base: 'relative grid size-full place-items-center overflow-x-auto overflow-y-auto p-popover-padding',\n },\n calendar: {\n base: 'grid max-w-full gap-2 text-sm',\n },\n presets: {\n base: [\n 'grid content-start gap-1 p-popover-padding',\n ],\n },\n preset: {\n base: OPTION_ITEM_CLASSES,\n },\n footer: {\n base: 'flex items-center justify-end gap-2 p-popover-padding',\n },\n nativeWrapper: {\n base: 'relative w-full min-w-0',\n },\n native: {\n base: [\n FIELD_CONTROL_NATIVE_CLASSES,\n CONTROL_MIN_SIZE_CLASSES.lg,\n ],\n variants: {\n radius: CONTROL_RADIUS_CLASSES,\n },\n defaults: {\n radius: 'md',\n },\n },\n },\n}});\n\nexport {datePickerStyles};\n","type DateFormatToken = '%Y' | '%m' | '%d';\n\ntype CompiledFormat = {\n source: string;\n tokens: DateFormatToken[];\n};\n\nconst ISO_DATE = /^\\d{4}-\\d{2}-\\d{2}$/;\nconst ISO_RANGE = /^\\d{4}-\\d{2}-\\d{2}\\/\\d{4}-\\d{2}-\\d{2}$/;\nconst TOKEN_PATTERN = /%[Ymd]/g;\n\nconst escapeRegex = (value: string): string => value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nconst compileLiteral = (value: string): string => {\n let cursor = 0;\n let source = '';\n for (const match of value.matchAll(/[\\s/-]+/g)) {\n source += escapeRegex(value.slice(cursor, match.index));\n source += '(?:\\\\s|[/-])+';\n cursor = (match.index ?? 0) + match[0].length;\n }\n return source + escapeRegex(value.slice(cursor));\n};\n\nconst compileFormat = (format: string): CompiledFormat => {\n const tokens: DateFormatToken[] = [];\n let cursor = 0;\n let source = '';\n for (const match of format.matchAll(TOKEN_PATTERN)) {\n source += compileLiteral(format.slice(cursor, match.index));\n const token = match[0] as DateFormatToken;\n tokens.push(token);\n source += token === '%Y' ? '(\\\\d{4})' : '(\\\\d{2})';\n cursor = (match.index ?? 0) + token.length;\n }\n source += compileLiteral(format.slice(cursor));\n return {source, tokens};\n};\n\nconst isoFromGroups = (groups: string[], tokens: DateFormatToken[]): string | null => {\n const values = Object.fromEntries(tokens.map((token, index) => [token, groups[index] ?? '']));\n const year = Number(values['%Y']);\n const month = Number(values['%m']);\n const day = Number(values['%d']);\n if (!year || !month || !day || new Set(tokens).size !== 3) return null;\n const date = new Date(Date.UTC(year, month - 1, day));\n if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day) return null;\n return `${String(year).padStart(4, '0')}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n};\n\nconst parseDateValue = ({\n input,\n format,\n range,\n separator,\n}: {\n input: string;\n format: string;\n range: boolean;\n separator: string;\n}): string | null => {\n const compiled = compileFormat(format);\n if (!range) {\n const match = input.trim().match(new RegExp(`^${compiled.source}$`));\n return match ? isoFromGroups(match.slice(1), compiled.tokens) : null;\n }\n const match = input.trim().match(new RegExp(\n `^${compiled.source}${compileLiteral(separator)}${compiled.source}$`,\n ));\n if (!match) return null;\n const width = compiled.tokens.length;\n const start = isoFromGroups(match.slice(1, width + 1), compiled.tokens);\n const end = isoFromGroups(match.slice(width + 1), compiled.tokens);\n return start && end && start <= end ? `${start}/${end}` : null;\n};\n\nconst formatIsoDate = (value: string, format: string): string => {\n if (!ISO_DATE.test(value)) return value;\n const [year = '', month = '', day = ''] = value.split('-');\n return format.replaceAll('%Y', year).replaceAll('%m', month).replaceAll('%d', day);\n};\n\nconst formatDatePlaceholder = (format: string): string => format\n .replaceAll('%Y', 'YYYY')\n .replaceAll('%m', 'MM')\n .replaceAll('%d', 'DD');\n\nconst sanitizeDateInput = ({\n input,\n format,\n separator,\n}: {\n input: string;\n format: string;\n separator: string;\n}): string => {\n const configuredLiterals = new Set(`${format.replace(TOKEN_PATTERN, '')}${separator}`);\n return Array.from(input).filter((character) => (\n /[0-9]/.test(character)\n || /[\\s/-]/.test(character)\n || configuredLiterals.has(character)\n )).join('');\n};\n\nconst maskDateInput = ({\n input,\n format,\n range,\n separator,\n}: {\n input: string;\n format: string;\n range: boolean;\n separator: string;\n}): string => {\n const endpointMask = format\n .replaceAll('%Y', '9999')\n .replaceAll('%m', '99')\n .replaceAll('%d', '99');\n const mask = range ? `${endpointMask}${separator}${endpointMask}` : endpointMask;\n const digits = input.match(/[0-9]/g) ?? [];\n let digitIndex = 0;\n let output = '';\n\n for (let index = 0; index < mask.length; index += 1) {\n const character = mask[index] ?? '';\n if (character === '9') {\n const digit = digits[digitIndex];\n if (digit === undefined) break;\n output += digit;\n digitIndex += 1;\n continue;\n }\n if (digitIndex > 0 && mask.slice(index + 1).includes('9')) output += character;\n }\n return output;\n};\n\nconst formatDateValue = ({\n value,\n format,\n range,\n separator,\n}: {\n value: string;\n format: string;\n range: boolean;\n separator: string;\n}): string => {\n if (!value) return '';\n if (!range) return formatIsoDate(value, format);\n if (!ISO_RANGE.test(value)) return value;\n const [start = '', end = ''] = value.split('/');\n return `${formatIsoDate(start, format)}${separator}${formatIsoDate(end, format)}`;\n};\n\nconst withinDateBounds = (value: string, min: string, max: string): boolean => {\n const dates = ISO_RANGE.test(value) ? value.split('/') : [value];\n return dates.every((date) => ISO_DATE.test(date) && (!min || date >= min) && (!max || date <= max));\n};\n\nexport {\n formatDatePlaceholder,\n formatDateValue,\n ISO_DATE,\n ISO_RANGE,\n maskDateInput,\n parseDateValue,\n sanitizeDateInput,\n withinDateBounds,\n};\n","import type Alpine from 'alpinejs';\n\nimport {\n type AlpineMachine,\n createAlpineMachine,\n defineAlpineData,\n type MachineSnapshot,\n reflectSchemaProp,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {createAnchoredPopoverSurface, type AnchoredPopoverSurface} from '@client/runtime/anchored-popover';\nimport {addDismissableLayer} from '@client/runtime/dismissable-layer';\nimport {\n dispatchNativeControlChange,\n syncControlPresence,\n syncNativeControl,\n syncRepeatedHiddenInputs,\n} from '@client/runtime/form-control';\nimport {mergeBindings, type BindingObject} from '@client/runtime/merge-bindings';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {addListener, asBool, dispatch, type CleanupStack, setPresence} from '@client/utils';\nimport {datePickerSchema, type DatePickerPreset, type DatePickerProps} from './contract';\nimport {\n createDatePickerMachine,\n type DatePickerContext,\n datePickerHooks,\n type SelectionSource,\n} from './machine';\nimport {datePickerStyles} from './styles';\nimport {\n formatDatePlaceholder,\n formatDateValue,\n ISO_DATE,\n ISO_RANGE,\n maskDateInput,\n parseDateValue,\n sanitizeDateInput,\n withinDateBounds,\n} from './value';\n\ntype DatePickerTransitionName = (typeof datePickerHooks)[number]['name'];\ntype DatePickerTransition<TName extends DatePickerTransitionName = DatePickerTransitionName> = TransitionForHook<\n Extract<(typeof datePickerHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype CalendarElement = HTMLElement & {\n value: string;\n focus(options?: FocusOptions & {target?: 'day' | 'next' | 'previous'}): void;\n};\n\ntype PopoverElement = HTMLElement & {showPopover(): void; hidePopover(): void};\n\n/**\n * Public Alpine API for `ui.datePicker`.\n *\n * @public\n */\ninterface UiDatePickerApi {\n /** Whether the picker is opening or fully open. */\n readonly isOpen: boolean;\n /** Whether the user is editing an uncommitted value. */\n readonly isEditing: boolean;\n /** Canonical ISO date or ISO date range. */\n readonly value: string;\n /** Canonical value currently staged in confirm mode. */\n readonly pendingValue: string;\n /** Identifier of the selected preset, when one matches. */\n readonly preset: string;\n /** Opens the calendar unless the picker is disabled or readonly. */\n open(event?: Event): void;\n /** Closes the calendar and restores focus after keyboard dismissal. */\n close(event?: Event): void;\n /** Reverses the current disclosure lifecycle. */\n toggle(event?: Event): void;\n /** Selects a canonical ISO date or ISO range. */\n select(value: string, event?: Event): void;\n /** Selects the preset identified by its stable value. */\n selectPreset(value: string, event?: Event): void;\n /** Selects the configured today value. */\n selectToday(event?: Event): void;\n /** Clears the committed date, preset, and submitted controls. */\n clear(event?: Event): void;\n /** Discards a pending confirm-mode selection and closes the calendar. */\n cancel(event?: Event): void;\n}\n\ntype DatePickerData = AlpineMachine<DatePickerContext, DatePickerProps, typeof datePickerHooks>\n & UiDatePickerApi\n & {\n readonly root: BindingObject;\n effectivePlaceholder(): string;\n init(): void;\n destroy(): void;\n };\n\nconst YEAR_OPTION_PAST_OFFSET = 100;\nconst YEAR_OPTION_FUTURE_OFFSET = 10;\n\nconst splitRange = (value: string): [string, string] => {\n const [start = '', end = ''] = value.split('/');\n return [start, end];\n};\nconst currentYear = (): number => new Date().getFullYear();\nconst defaultMinDate = (): string => `${currentYear() - YEAR_OPTION_PAST_OFFSET}-01-01`;\nconst defaultMaxDate = (): string => `${currentYear() + YEAR_OPTION_FUTURE_OFFSET}-12-31`;\nconst todayIsoDate = (): string => new Date().toISOString().slice(0, 10);\n\nconst formatMonthHeading = (value: string, locale: string): string => {\n if (!ISO_DATE.test(value)) return '';\n return new Intl.DateTimeFormat(locale || undefined, {\n month: 'long',\n timeZone: 'UTC',\n year: 'numeric',\n }).format(new Date(`${value}T00:00:00.000Z`));\n};\n\nconst presetFromElement = (el: HTMLElement): DatePickerPreset => ({\n value: el.dataset.value ?? '',\n label: el.dataset.label ?? el.textContent?.trim() ?? '',\n start: el.dataset.start ?? '',\n end: el.dataset.end ?? '',\n disabled: asBool({value: el.dataset.disabled}),\n});\n\nconst UiDatePicker = (): TrellisAlpineComponent<DatePickerData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let triggerId = '';\n let popoverId = '';\n let popover: AnchoredPopoverSurface | null = null;\n let cleanup: CleanupStack = [];\n let hiddenInputsKey = '';\n let presetInputKey = '';\n let liveMessage = '';\n let lastInputValue = '';\n let restoreFocusAfterClose = false;\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Date picker has not been initialized.');\n return rootEl;\n };\n const currentProps = (): Readonly<DatePickerProps> => bridge.getCommittedSnapshot().props;\n const currentContext = (): Readonly<DatePickerContext> => bridge.getCommittedSnapshot().context;\n const trigger = (): HTMLElement => {\n const el = root().querySelector<HTMLElement>('[data-ui-date-picker-trigger]');\n if (!el) throw new Error('Date picker requires a trigger.');\n return el;\n };\n const input = (): HTMLInputElement => {\n const el = root().querySelector<HTMLInputElement>('[data-ui-date-picker-input]');\n if (!el) throw new Error('Date picker requires an input.');\n return el;\n };\n const toggleButton = (): HTMLButtonElement | null => root().querySelector('[data-ui-date-picker-toggle]');\n const popoverEl = (): PopoverElement => {\n const el = root().querySelector<HTMLElement>('[data-ui-date-picker-popover]');\n if (!el) throw new Error('Date picker requires a popover.');\n return el as PopoverElement;\n };\n const calendar = (): CalendarElement | null => root().querySelector('[data-ui-date-picker-calendar]');\n const hiddenInputsEl = (): HTMLElement | null => root().querySelector('[data-ui-date-picker-hidden-inputs]');\n const presetInputsEl = (): HTMLElement | null => root().querySelector('[data-ui-date-picker-preset-inputs]');\n const isRange = (): boolean => currentProps().mode === 'range';\n const effectiveMonths = (): number => currentProps().months || (isRange() ? 2 : 1);\n const presetItems = (): DatePickerPreset[] => {\n const items = Array.from(root().querySelectorAll<HTMLElement>('[data-ui-date-picker-preset]'))\n .map(presetFromElement)\n .filter((preset) => preset.value && preset.start && preset.end);\n return items.length ? items : currentProps().presets;\n };\n const formatted = (value: string): string => formatDateValue({\n value,\n format: currentProps().format,\n range: isRange(),\n separator: currentProps().rangeSeparator,\n });\n const selectedPreset = (value: string): string => {\n const match = presetItems().find((preset) => (\n isRange() ? `${preset.start}/${preset.end}` : preset.start\n ) === value);\n const custom = presetItems().find((preset) => preset.value === 'custom');\n return match?.value ?? (value && custom ? 'custom' : '');\n };\n const syncCalendarHeading = (focusedDate?: string): void => {\n const heading = root().querySelector<HTMLElement>('[data-ui-date-picker-calendar-heading]');\n if (!heading) return;\n const props = currentProps();\n const value = focusedDate || splitRange(currentContext().selection.value || props.openTo || props.today || todayIsoDate())[0];\n heading.textContent = formatMonthHeading(value, props.locale);\n };\n const syncCalendar = (): void => {\n const el = calendar();\n if (!el) return;\n const props = currentProps();\n const context = currentContext();\n const value = context.selection.pendingValue;\n if (customElements.get('calendar-date')) el.value = value;\n el.setAttribute('value', value);\n setPresence({el, attr: 'tentative', present: isRange() && Boolean(value) && !ISO_RANGE.test(value)});\n el.setAttribute('months', String(effectiveMonths()));\n el.style.setProperty('--ui-date-picker-month-columns', String(effectiveMonths()));\n el.setAttribute('min', props.min || defaultMinDate());\n el.setAttribute('max', props.max || defaultMaxDate());\n if (props.today) el.setAttribute('today', props.today); else el.removeAttribute('today');\n const focused = props.forceOpenTo ? props.openTo : context.selection.value || props.openTo || props.today || todayIsoDate();\n el.setAttribute('focused-date', splitRange(focused)[0]);\n if (props.locale) el.setAttribute('locale', props.locale); else el.removeAttribute('locale');\n if (props.firstDayOfWeek >= 0) el.setAttribute('first-day-of-week', String(props.firstDayOfWeek));\n const inlineHeading = !props.selectableHeader && effectiveMonths() === 1;\n setPresence({el, attr: 'data-inline-heading', present: inlineHeading, value: 'true'});\n setPresence({el, attr: 'data-hide-month-heading', present: (props.selectableHeader && !isRange()) || inlineHeading, value: 'true'});\n setPresence({el, attr: 'data-fixed-weeks', present: props.fixedWeeks, value: 'true'});\n setPresence({el, attr: 'show-outside-days', present: props.showOutsideDays || props.fixedWeeks});\n setPresence({el, attr: 'show-week-numbers', present: props.showWeekNumbers});\n };\n const syncPresets = (): void => {\n const value = currentContext().selection.pendingValue || currentContext().selection.value;\n root().querySelectorAll<HTMLElement>('[data-ui-date-picker-preset]').forEach((el) => {\n const preset = presetFromElement(el);\n const presetValue = isRange() ? `${preset.start}/${preset.end}` : preset.start;\n setPresence({el, attr: 'data-selected', present: presetValue === value, value: 'true'});\n setPresence({el, attr: 'data-disabled', present: preset.disabled ?? false, value: 'true'});\n });\n };\n const syncHiddenInputs = (): void => {\n const container = hiddenInputsEl();\n if (!container) return;\n const props = currentProps();\n const value = currentContext().selection.value;\n if (!isRange()) {\n hiddenInputsKey = syncRepeatedHiddenInputs({container, currentKey: hiddenInputsKey, state: {\n name: props.name,\n values: value ? [value] : [],\n required: props.required,\n form: props.form,\n marker: 'data-ui-date-picker-hidden-input',\n }});\n return;\n }\n const [start, end] = splitRange(value);\n if (props.startName || props.endName) {\n const key = JSON.stringify({startName: props.startName, endName: props.endName, start, end, form: props.form});\n if (key === hiddenInputsKey) return;\n container.replaceChildren();\n [[props.startName, start], [props.endName, end]].forEach(([name, itemValue]) => {\n if (!name) return;\n const hidden = document.createElement('input');\n hidden.type = 'hidden'; hidden.name = name; hidden.value = itemValue ?? '';\n hidden.setAttribute('data-ui-date-picker-hidden-input', '');\n if (props.form) hidden.setAttribute('form', props.form);\n container.append(hidden);\n });\n hiddenInputsKey = key;\n return;\n }\n hiddenInputsKey = syncRepeatedHiddenInputs({container, currentKey: hiddenInputsKey, state: {\n name: props.name, values: value ? [value] : [], required: props.required, form: props.form,\n marker: 'data-ui-date-picker-hidden-input',\n }});\n };\n const syncPresetInput = (): void => {\n const container = presetInputsEl();\n if (!container) return;\n const props = currentProps();\n const value = selectedPreset(currentContext().selection.value);\n presetInputKey = syncRepeatedHiddenInputs({container, currentKey: presetInputKey, state: {\n name: props.presetName, values: value ? [value] : [], form: props.form,\n marker: 'data-ui-date-picker-preset-input',\n }});\n };\n const syncControl = (): void => {\n const props = currentProps();\n const context = currentContext();\n const visible = bridge.hasTag('visible');\n const expanded = bridge.hasTag('expanded');\n const triggerEl = trigger();\n const inputEl = input();\n const floating = popoverEl();\n triggerEl.id = triggerId;\n floating.id = popoverId;\n floating.dataset.state = expanded ? 'open' : 'closed';\n floating.hidden = !visible;\n triggerEl.dataset.state = expanded ? 'open' : 'closed';\n syncControlPresence({el: triggerEl, state: props, value: 'true'});\n const toggle = toggleButton();\n const ariaOwner = toggle ?? triggerEl;\n ariaOwner.setAttribute('aria-haspopup', 'dialog');\n ariaOwner.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n ariaOwner.setAttribute('aria-controls', popoverId);\n if (triggerEl instanceof HTMLButtonElement) triggerEl.disabled = props.disabled;\n const displayValue = bridge.hasTag('editing')\n ? context.input.value\n : formatted(context.selection.value);\n syncNativeControl({input: inputEl, state: {\n name: '',\n value: displayValue,\n disabled: props.disabled,\n readonly: props.readonly,\n required: props.required && props.mode === 'single',\n invalid: props.invalid || !context.input.valid,\n }});\n inputEl.placeholder = component.effectivePlaceholder();\n root().querySelectorAll<HTMLButtonElement>('[data-ui-date-picker-clear], [data-ui-date-picker-toggle]')\n .forEach((button) => { button.disabled = props.disabled; });\n lastInputValue = displayValue;\n const live = root().querySelector<HTMLElement>('[data-ui-date-picker-live]');\n if (live) live.textContent = liveMessage;\n };\n const syncToday = (): void => {\n const button = root().querySelector<HTMLElement>('[data-ui-date-picker-calendar-today]');\n const dayEl = root().querySelector<HTMLElement>('[data-ui-date-picker-today-day]');\n if (!button || !dayEl) return;\n const today = currentProps().today || todayIsoDate();\n const day = ISO_DATE.test(today) ? String(Number(today.slice(-2))) : '';\n dayEl.textContent = day;\n button.setAttribute('aria-label', day ? `Go to today, ${today}` : 'Go to today');\n };\n const syncSurface = (): void => {\n const props = currentProps();\n const floating = popoverEl();\n floating.dataset.uiSurface = props.surface;\n floating.dataset.uiElevation = props.elevation;\n };\n const syncAll = (): void => {\n reflectSchemaProp({\n el: root(),\n schema: datePickerSchema,\n key: 'value',\n value: currentContext().selection.value,\n });\n syncControl(); syncCalendar(); syncCalendarHeading(); syncToday(); syncSurface();\n syncHiddenInputs(); syncPresetInput(); syncPresets();\n if (bridge.hasTag('visible')) popover?.sync();\n };\n const notifyChange = (): void => {\n dispatchNativeControlChange({\n container: hiddenInputsEl(), fallback: root(), marker: 'data-ui-date-picker-hidden-input',\n });\n dispatch({el: root(), name: 'ui:change'});\n };\n const commit = (value: string, source: SelectionSource, preset = ''): void => {\n if (currentProps().disabled || currentProps().readonly) return;\n bridge.send({type: 'SELECT', value, source, preset});\n };\n const parseInput = (raw: string): string | null => {\n const props = currentProps();\n const value = parseDateValue({input: raw, format: props.format, range: isRange(), separator: props.rangeSeparator});\n return value && withinDateBounds(value, props.min, props.max) ? value : null;\n };\n\n const bridge = createAlpineMachine({\n schema: datePickerSchema,\n hooks: datePickerHooks,\n createMachine: ({props}) => createDatePickerMachine({\n props,\n context: {\n selection: {value: props.value, pendingValue: props.value, previousValue: props.value, source: 'props'},\n input: {value: '', valid: true},\n preset: {value: props.preset},\n },\n effects: {\n prepareOpen: () => {\n const floating = popoverEl();\n floating.hidden = false;\n popover?.open();\n syncAll();\n },\n finishOpen: () => {\n if (restoreFocusAfterClose) calendar()?.focus({preventScroll: true});\n restoreFocusAfterClose = false;\n dispatch({el: root(), name: 'ui:open'});\n },\n prepareClose: syncAll,\n finishClose: () => {\n const floating = popoverEl();\n popover?.close();\n floating.hidden = true;\n if (restoreFocusAfterClose) trigger().focus({preventScroll: true});\n restoreFocusAfterClose = false;\n syncAll();\n dispatch({el: root(), name: 'ui:close'});\n },\n syncInput: syncControl,\n syncPending: () => { syncControl(); syncCalendar(); syncPresets(); },\n markInvalid: () => {\n input().setCustomValidity(`Enter a date in ${currentProps().format}`);\n syncControl();\n dispatch({el: root(), name: 'ui:invalid'});\n },\n commitSelection: () => {\n input().setCustomValidity('');\n const context = currentContext();\n liveMessage = context.selection.value ? (isRange() ? 'Range selected' : 'Date selected') : 'Date cleared';\n syncAll();\n notifyChange();\n dispatch({el: root(), name: context.selection.value ? 'ui:select' : 'ui:clear'});\n },\n syncProps: syncAll,\n syncPresets: () => { syncPresets(); syncPresetInput(); },\n },\n }),\n resolveTransitionElement: ({name, root: owner}) => {\n if (name === 'opening' || name === 'closing') return owner.querySelector('[data-ui-date-picker-popover]');\n if (name === 'parsing') return owner.querySelector('[data-ui-date-picker-input]');\n return owner;\n },\n });\n\n let component!: TrellisAlpineComponent<DatePickerData>;\n component = {\n ...bridge,\n get isOpen(): boolean { return bridge.hasTag('expanded'); },\n get isEditing(): boolean { return bridge.hasTag('editing'); },\n get value(): string { return bridge.getCommittedSnapshot().context.selection.value; },\n get pendingValue(): string { return bridge.getCommittedSnapshot().context.selection.pendingValue; },\n get preset(): string { return selectedPreset(bridge.getCommittedSnapshot().context.selection.value); },\n get root(): BindingObject {\n return mergeBindings({inputs: [resolveStyle({\n part: datePickerStyles.parts.root,\n props: bridge.getCommittedSnapshot().props,\n className: bridge.getCommittedSnapshot().props.class,\n }), {'data-ui-date-picker': '', ':data-state': () => (component.isOpen ? 'open' : 'closed')}]});\n },\n effectivePlaceholder(): string {\n const props = bridge.getCommittedSnapshot().props;\n if (props.placeholder) return props.placeholder;\n const placeholder = formatDatePlaceholder(props.format);\n return props.mode === 'range'\n ? `${placeholder}${props.rangeSeparator}${placeholder}`\n : placeholder;\n },\n open(event?: Event): void {\n event?.preventDefault();\n if (event instanceof KeyboardEvent) restoreFocusAfterClose = true;\n bridge.send('OPEN');\n },\n close(event?: Event): void {\n event?.preventDefault();\n if (event instanceof KeyboardEvent) restoreFocusAfterClose = true;\n bridge.send('CLOSE');\n },\n toggle(event?: Event): void {\n event?.preventDefault();\n bridge.send('TOGGLE');\n },\n select(value: string, event?: Event): void {\n event?.preventDefault();\n if (!withinDateBounds(value, currentProps().min, currentProps().max)) return;\n const valid = isRange() ? ISO_RANGE.test(value) : ISO_DATE.test(value);\n if (valid) commit(value, 'input');\n },\n selectPreset(value: string, event?: Event): void {\n event?.preventDefault();\n if (currentProps().disabled || currentProps().readonly) return;\n const preset = presetItems().find((item) => item.value === value);\n if (!preset || preset.disabled) return;\n const next = isRange() ? `${preset.start}/${preset.end}` : preset.start;\n if (currentProps().close === 'confirm') bridge.send({type: 'PENDING', value: next, source: 'preset', preset: value});\n else commit(next, 'preset', value);\n },\n selectToday(event?: Event): void {\n event?.preventDefault();\n if (currentProps().disabled || currentProps().readonly) return;\n const today = currentProps().today || todayIsoDate();\n const value = isRange() ? `${today}/${today}` : today;\n if (currentProps().close === 'confirm') bridge.send({type: 'PENDING', value, source: 'today'});\n else commit(value, 'today');\n },\n clear(event?: Event): void {\n event?.preventDefault();\n if (currentProps().disabled || currentProps().readonly) return;\n bridge.send('CLEAR');\n },\n cancel(event?: Event): void { event?.preventDefault(); bridge.send('CANCEL'); bridge.send('CLOSE'); },\n init(): void {\n rootEl = this.$el;\n triggerId = this.$id('date-picker-trigger');\n popoverId = this.$id('date-picker-popover');\n bridge.connect(this.$el, this.snapshot);\n popover = createAnchoredPopoverSurface({\n reference: trigger,\n floating: popoverEl,\n position: () => currentProps().side,\n align: () => currentProps().align,\n gap: () => currentProps().gap,\n offset: () => currentProps().offset,\n matchReferenceWidth: false,\n });\n const triggerEl = trigger();\n const inputEl = input();\n const floating = popoverEl();\n addListener({target: triggerEl, event: 'click', cleanup, handler: (event) => {\n const target = event.target;\n if (target instanceof Element && target.closest('[data-ui-date-picker-clear]')) component.clear(event);\n else component.toggle(event);\n }});\n addListener({target: triggerEl, event: 'keydown', cleanup, handler: (raw) => {\n const event = raw as KeyboardEvent;\n if ((event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') && !component.isOpen) component.open(event);\n else if (event.key === 'Escape' && component.isOpen) component.close(event);\n }});\n addListener({target: root(), event: 'keydown', cleanup, handler: (raw) => {\n const event = raw as KeyboardEvent;\n if (event.key === 'Escape' && component.isOpen) component.close(event);\n }});\n addListener({target: inputEl, event: 'input', cleanup, handler: () => {\n const cursor = inputEl.selectionStart ?? inputEl.value.length;\n const digitsBeforeCursor = (inputEl.value.slice(0, cursor).match(/[0-9]/g) ?? []).length;\n let raw = sanitizeDateInput({\n input: inputEl.value,\n format: currentProps().format,\n separator: currentProps().rangeSeparator,\n });\n const deleting = lastInputValue.length - raw.length === 1;\n if (!deleting) raw = maskDateInput({\n input: raw,\n format: currentProps().format,\n range: isRange(),\n separator: currentProps().rangeSeparator,\n });\n if (inputEl.value !== raw) {\n inputEl.value = raw;\n let digitsSeen = 0;\n let nextCursor = raw.length;\n for (let index = 0; index < raw.length; index += 1) {\n if (/[0-9]/.test(raw[index] ?? '')) digitsSeen += 1;\n if (digitsSeen !== digitsBeforeCursor) continue;\n nextCursor = index + 1;\n while (nextCursor < raw.length && !/[0-9]/.test(raw[nextCursor] ?? '')) nextCursor += 1;\n break;\n }\n inputEl.setSelectionRange(nextCursor, nextCursor);\n }\n lastInputValue = raw;\n bridge.send({type: 'INPUT', input: raw});\n const parsed = parseInput(raw);\n if (parsed) commit(parsed, 'input');\n }});\n addListener({target: inputEl, event: 'change', cleanup, handler: () => {\n const parsed = parseInput(inputEl.value);\n if (parsed) commit(parsed, 'input');\n else if (inputEl.value.trim()) bridge.send({type: 'PARSE', input: inputEl.value});\n else bridge.send('CLEAR');\n }});\n addListener({target: floating, event: 'pointerdown', cleanup, handler: (event) => event.stopPropagation()});\n addListener({target: floating, event: 'click', cleanup, handler: (event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n const preset = target.closest<HTMLElement>('[data-ui-date-picker-preset]');\n if (preset) component.selectPreset(preset.dataset.value ?? '', event);\n else if (target.closest('[data-ui-date-picker-clear]')) component.clear(event);\n else if (target.closest('[data-ui-date-picker-cancel]')) component.cancel(event);\n else if (target.closest('[data-ui-date-picker-apply]')) bridge.send('APPLY');\n else if (target.closest('[data-ui-date-picker-today]')) component.selectToday(event);\n }});\n const calendarEl = calendar();\n if (calendarEl) {\n void customElements.whenDefined('calendar-date').then(() => {\n if (rootEl) syncCalendar();\n });\n addListener({target: calendarEl, event: 'change', cleanup, handler: () => {\n const value = calendarEl.value;\n if (isRange() && !ISO_RANGE.test(value)) {\n liveMessage = 'Start date selected';\n bridge.send({type: 'PENDING', value, source: 'calendar'});\n } else if (currentProps().close === 'confirm') {\n bridge.send({type: 'PENDING', value, source: 'calendar'});\n } else commit(value, 'calendar');\n }});\n addListener({target: calendarEl, event: 'focusday', cleanup, handler: (event) => {\n const detail = (event as CustomEvent<Date>).detail;\n if (detail instanceof Date) syncCalendarHeading(detail.toISOString().slice(0, 10));\n }});\n }\n cleanup.push(addDismissableLayer({\n isEnabled: () => component.isOpen,\n roots: () => [root(), floating],\n onDismiss: () => component.close(),\n }));\n const presetObserver = new MutationObserver(() => bridge.send('PRESETS_CHANGED'));\n presetObserver.observe(root(), {childList: true, subtree: true, attributes: true, attributeFilter: ['data-value', 'data-start', 'data-end', 'data-disabled']});\n cleanup.push(() => presetObserver.disconnect());\n syncAll();\n },\n destroy(): void {\n cleanup.forEach((dispose) => dispose());\n cleanup = [];\n popover?.destroy();\n popover = null;\n bridge.disconnect();\n rootEl = null;\n },\n };\n return component;\n};\n\nconst registerDatePicker = defineAlpineData('UiDatePicker', UiDatePicker);\n\nexport {registerDatePicker, UiDatePicker};\nexport type {DatePickerData, DatePickerTransition, UiDatePickerApi};\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 {registerCalendarCapability} from '../../capabilities/calendar';\nimport {registerDatePicker as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerDatePicker = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerCalendarCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerDatePicker};\nexport default registerDatePicker;\nexport * from './index';\n"],"file":"entry.generated-B-wVMxe6.js"}
@@ -1,2 +0,0 @@
1
- import{d as e,l as t}from"./motion-BQk-uLaI.js";import{t as n}from"./capability-motion-DoZROkFD.js";import{a as r,f as i,l as a,n as o}from"./codecs-Cb1ns_47.js";import{i as s,r as c,s as l,t as ee}from"./dom-qAeVl7dc.js";import{i as u,t as te}from"./alpine-machine-BS13dbK4.js";import{t as d}from"./alpine-data-CytyCyfk.js";import{n as f,t as p}from"./styles-TfvwVPGw.js";import{t as ne}from"./merge-bindings-C8ewA_FD.js";import{t as m}from"./machine-Dqut4h89.js";import{i as re}from"./focus-scope-DtaPVNl5.js";import{t as ie}from"./semantic-observer-BUswpsNx.js";import{t as ae}from"./drag-and-drop-DHq3udf7.js";import{t as h}from"./capability-resizable-Bga8TngJ.js";var g=(e,t)=>{let n=getComputedStyle(e).getPropertyValue(`--breakpoint-${t}`),r=Number.parseFloat(n);return Number.isFinite(r)?r:1/0},_=[`horizontal`,`vertical`],v=[`div`,`section`,`aside`,`main`,`nav`],y=[`1`,`2`,`3`,`4`,`5`,`6`,`fill`],oe=[`none`,`start`,`end`],b=[`toggle`,`expand`,`collapse`],se={id:i.default(`ui-panels`),orientation:a(_,`horizontal`),persist:o,divider:o.default(!0),class:i},ce={id:i,as:a(v,`section`),size:a(y,`fill`),resize:a(oe,`none`),collapsible:o,defaultCollapsed:o,class:i},x={target:i,action:a(b,`toggle`),icon:i.default(`menu`),label:i.default(`Expand`),class:i},le=[u({name:`opening`,state:`changing`,projectEach:e=>e.context.change.openingIds.map(e=>({panelId:e})),onDone:`CHANGE_DONE`,onError:`CHANGE_ERROR`,sends:{expand:e=>({type:`EXPAND`,panelId:e}),collapse:e=>({type:`COLLAPSE`,panelId:e}),toggle:e=>({type:`TOGGLE`,panelId:e})}}),u({name:`closing`,state:`changing`,projectEach:e=>e.context.change.closingIds.map(e=>({panelId:e})),onDone:`CHANGE_DONE`,onError:`CHANGE_ERROR`,sends:{expand:e=>({type:`EXPAND`,panelId:e}),collapse:e=>({type:`COLLAPSE`,panelId:e}),toggle:e=>({type:`TOGGLE`,panelId:e})}}),u({name:`sizing`,state:`sizing`,projectEach:e=>e.context.sizing.changes,onDone:`SIZE_DONE`,onError:`SIZE_ERROR`}),u({name:`persisting`,state:`persisting`,project:e=>({groupId:e.props.id,collapsed:[...e.context.layout.collapsedIds],sizes:{...e.context.layout.committedSizes}}),onDone:`PERSIST_DONE`,onError:`PERSIST_ERROR`})],S=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],C=e=>typeof e.panelId==`string`?e.panelId:``,w=e=>typeof e==`number`&&Number.isFinite(e)?e:null,T=e=>(Array.isArray(e.changes)?e.changes:[e]).flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=e,n=typeof t.panelId==`string`?t.panelId:``,r=w(t.from),i=w(t.to),a=t.reset===!0;return n&&r!==null&&i!==null&&(r!==i||a)?[{panelId:n,from:r,to:i,...a?{reset:!0}:{}}]:[]}),E=(e,t)=>typeof e.props==`object`&&e.props!==null?e.props:t,D=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),O=e=>{let t=C(e.event),n=e.context.layout.collapsedIds;switch(e.event.type){case`COLLAPSE`:return e.context.collection.collapsibleIds.includes(t)&&!n.includes(t)?e.context.collection.ids.filter(e=>n.includes(e)||e===t):n;case`EXPAND`:return n.filter(e=>e!==t);case`TOGGLE`:return e.context.collection.collapsibleIds.includes(t)?n.includes(t)?n.filter(e=>e!==t):e.context.collection.ids.filter(e=>n.includes(e)||e===t):n;default:return n}},k=e=>{let t=C(e.event);return e.context.collection.ids.includes(t)&&!D(e.context.layout.collapsedIds,O(e))},A=e=>{let t=C(e.event);return e.context.collection.resizableIds.includes(t)&&!e.context.layout.collapsedIds.includes(t)&&w(e.event.size)!==null},j=e=>{let t=T(e.event);return t.length>0&&t.every(({panelId:t})=>e.context.collection.sizableIds.includes(t)&&!e.context.layout.collapsedIds.includes(t))},M=e=>{let t=T(e.event);return t.length>0&&t.every(({panelId:t})=>e.context.collection.sizableIds.includes(t)&&e.context.layout.collapsedIds.includes(t))},N=e=>{let t=S(e.event.ids);return t.length>0&&t.every(t=>e.context.collection.sizableIds.includes(t)&&e.context.layout.collapsedIds.includes(t)&&Object.hasOwn(e.context.layout.committedSizes,t))},P=e=>{let t=T(e.event),n={...e.context.layout.committedSizes};return t.forEach(({panelId:e,to:t,reset:r})=>{r?delete n[e]:n[e]=t}),{context:{...e.context,layout:{...e.context.layout,committedSizes:n},sizing:{changes:t}}}},F=e=>{let t=T(e.event);return{context:{...e.context,layout:{...e.context.layout,committedSizes:{...e.context.layout.committedSizes,...Object.fromEntries(t.map(({panelId:e,to:t})=>[e,t]))}}}}},I=e=>{let t={...e.context.layout.committedSizes};return S(e.event.ids).forEach(e=>delete t[e]),{context:{...e.context,layout:{...e.context.layout,committedSizes:t}}}},L=e=>{let t=O(e),n=e.context.layout.collapsedIds;return{context:{...e.context,layout:{...e.context.layout,collapsedIds:t},change:{openingIds:n.filter(e=>!t.includes(e)),closingIds:t.filter(e=>!n.includes(e))}}}},R=e=>{let t=S(e.event.ids),n=S(e.event.collapsibleIds).filter(e=>t.includes(e)),r=S(e.event.sizableIds).filter(e=>t.includes(e)),i=S(e.event.resizableIds).filter(e=>t.includes(e)),a=S(e.event.authoredCollapsedIds).filter(e=>n.includes(e)),o=new Set(e.context.collection.ids),s=t.filter(t=>(e.context.layout.collapsedIds.includes(t)||!o.has(t)&&a.includes(t))&&n.includes(t)),c=Object.fromEntries(Object.entries(e.context.layout.committedSizes).filter(([e])=>t.includes(e)&&r.includes(e))),l=t.includes(e.context.resize.activeId)&&i.includes(e.context.resize.activeId);return{context:{...e.context,collection:{ids:t,collapsibleIds:n,sizableIds:r,resizableIds:i},layout:{collapsedIds:s,committedSizes:c},authored:{collapsedIds:a},resize:l?e.context.resize:{activeId:``,initialSize:null,previewSize:null}}}},z=e=>{let t=S(e.event.ids),n=S(e.event.resizableIds);return!t.includes(e.context.resize.activeId)||!n.includes(e.context.resize.activeId)},ue=({props:e,context:t,effects:n})=>m({initial:`stable`,on:{DOM_INVALIDATED:{effects:`sync`}},states:{stable:{tags:[`stable`],on:{COLLAPSE:{target:`changing`,guard:k,reduce:L,effects:`prepareChange`},EXPAND:{target:`changing`,guard:k,reduce:L,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:k,reduce:L,effects:`prepareChange`},SIZE:{target:`sizing`,guard:j,reduce:P,effects:`prepareSizing`},RESTORE_HIDDEN_SIZES:{guard:M,reduce:F},RESET_HIDDEN_SIZES:{target:`persisting`,guard:N,reduce:I,effects:[`sync`,`persist`]},RESIZE_START:{target:`resizing`,guard:A,reduce:`startResize`,effects:`beginResize`},PANELS_CHANGED:{reduce:R,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},changing:{tags:[`changing`,`transitioning`],on:{CHANGE_DONE:{target:`persisting`,effects:[`finishChange`,`persist`]},CHANGE_ERROR:{target:`persisting`,effects:[`finishChange`,`persist`]},COLLAPSE:{target:`changing`,guard:k,reduce:L,effects:`prepareChange`},EXPAND:{target:`changing`,guard:k,reduce:L,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:k,reduce:L,effects:`prepareChange`},PANELS_CHANGED:{reduce:R,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},sizing:{tags:[`sizing`,`transitioning`],on:{SIZE_DONE:{target:`persisting`,effects:[`finishSizing`,`persist`]},SIZE_ERROR:{target:`persisting`,effects:[`finishSizing`,`persist`]},SIZE:{target:`sizing`,guard:j,reduce:P,effects:`prepareSizing`},RESIZE_START:{target:`resizing`,guard:A,reduce:`startResize`,effects:`beginResize`},PANELS_CHANGED:{reduce:R,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},resizing:{tags:[`resizing`],on:{RESIZE:{guard:`activeResize`,reduce:`previewResize`,effects:`previewResize`},RESIZE_END:{target:`persisting`,guard:`activeResize`,reduce:`commitResize`,effects:[`commitResize`,`persist`]},RESIZE_CANCEL:{target:`stable`,reduce:`clearResize`,effects:`cancelResize`},PANELS_CHANGED:[{target:`stable`,guard:z,reduce:R,effects:[`cancelResize`,`sync`]},{reduce:R,effects:`sync`}],PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},persisting:{tags:[`persisting`],on:{PERSIST_DONE:`stable`,PERSIST_ERROR:`stable`,COLLAPSE:{target:`changing`,guard:k,reduce:L,effects:`prepareChange`},EXPAND:{target:`changing`,guard:k,reduce:L,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:k,reduce:L,effects:`prepareChange`},SIZE:{target:`sizing`,guard:j,reduce:P,effects:`prepareSizing`},PANELS_CHANGED:{reduce:R,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}}}},{props:e,context:t,reducers:{replaceProps:e=>({props:E(e.event,e.props)}),startResize:e=>{let t=w(e.event.size);return{context:{...e.context,resize:{activeId:C(e.event),initialSize:t,previewSize:t}}}},previewResize:e=>({context:{...e.context,resize:{...e.context.resize,previewSize:w(e.event.size)}}}),commitResize:e=>{let t=C(e.event),n=w(e.event.size);if(n!==null)return{context:{...e.context,layout:{...e.context.layout,committedSizes:{...e.context.layout.committedSizes,[t]:n}},resize:{activeId:``,initialSize:null,previewSize:null}}}},clearResize:e=>({context:{...e.context,resize:{activeId:``,initialSize:null,previewSize:null}}})},guards:{activeResize:e=>C(e.event)===e.context.resize.activeId&&w(e.event.size)!==null},effects:{prepareChange:n.prepareChange,finishChange:n.finishChange,sync:n.sync,beginResize:n.beginResize,previewResize:n.previewResize,commitResize:n.commitResize,cancelResize:n.cancelResize,prepareSizing:n.prepareSizing,finishSizing:n.finishSizing,persist:n.persist}}),B=p({definition:{component:`ui.panels`,parts:{root:{base:`relative flex h-full min-h-0 w-full min-w-0`,variants:{orientation:{horizontal:`flex-row`,vertical:`flex-col`}},defaults:{orientation:`horizontal`}},panel:{base:`relative min-w-0 overflow-hidden`,variants:{orientation:{horizontal:`h-full`,vertical:`w-full`},divider:{true:``,false:``},resize:{none:``,start:``,end:``}},defaults:{orientation:`horizontal`,divider:!0,resize:`none`}},expanded:{base:`h-full min-h-0 w-full min-w-0`},collapsed:{base:`flex h-full min-h-0 w-full min-w-0 items-center justify-center overflow-hidden`},resizeHandle:{base:[`absolute z-20 touch-none border-transparent outline-none`,`hover:border-intent-neutral-edge-hover focus-visible:ui-focus-ring-inset`,`data-resizing:border-intent-neutral-edge-strong`],variants:{orientation:{horizontal:`inset-y-0 w-panel-resize-handle cursor-col-resize`,vertical:`inset-x-0 h-panel-resize-handle cursor-row-resize`},edge:{start:``,end:``}},defaults:{orientation:`horizontal`,edge:`end`}},toggle:{base:`inline-flex size-control-md items-center justify-center outline-none focus-visible:ui-focus-ring-inset`},toggleIcon:{base:`size-icon-md shrink-0`}}}}),V=new Set,H=e=>e instanceof CustomEvent&&e.detail&&typeof e.detail==`object`?e.detail:{},de=(()=>{let e=!1;return()=>{if(e||typeof document>`u`)return;let t=e=>t=>{let n=H(t);n.__panelsNotification||!n.panelId||V.forEach(t=>{n.groupId&&n.groupId!==t.id||t.hasPanel(n.panelId)&&t.perform(n.action??e,n.panelId,n.trigger)})};document.addEventListener(`ui:panel-collapse`,t(`collapse`)),document.addEventListener(`ui:panel-expand`,t(`expand`)),document.addEventListener(`ui:panel-toggle`,t(`toggle`)),document.addEventListener(`ui:panel-size`,e=>{let t=H(e);t.__panelsNotification||!t.panelId||!Number.isFinite(t.size)||V.forEach(e=>{t.groupId&&t.groupId!==e.id||e.hasPanel(t.panelId)&&e.resize(t.panelId,t.size)})}),document.addEventListener(`ui:panels-reset`,e=>{let t=H(e);t.__panelsNotification||V.forEach(e=>{t.groupId&&t.groupId!==e.id||t.panelId&&!e.hasPanel(t.panelId)||e.reset(t.panelId)})}),e=!0}})(),U=e=>`trellis-ui:panels:${e}:v1`,fe=e=>typeof e!=`object`||!e||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[1]==`number`&&Number.isFinite(e[1]))),W=()=>{let n=null,i=null,a=null,o=`wide`,u=[],d=new Set,p=new Set,m=new Map,h=new Map,_=new Map,v=new Map,y=()=>{if(!n)throw Error(`Panels has not been initialized.`);return n},oe=e=>e.closest(`[data-ui-panels]`)===y(),b=()=>Array.from(y().children).flatMap(e=>{if(!(e instanceof HTMLElement)||!e.hasAttribute(`data-ui-panel`))return[];let t=e.querySelector(`:scope > [data-ui-panel-expanded]`);return!t||!oe(t)?[]:[{panel:e,expanded:t,collapsed:e.querySelector(`:scope > [data-ui-panel-collapsed]`),handle:e.querySelector(`:scope > [data-ui-panel-resize-handle]`),props:r({el:e,schema:ce})}]}),x=e=>b().find(t=>t.props.id===e)??null,S=()=>Q.getCommittedSnapshot().context,C=()=>Q.getCommittedSnapshot().props,w=e=>S().layout.collapsedIds.includes(e),T=()=>C().orientation===`horizontal`&&o===`stacked`,E=()=>T()?`vertical`:C().orientation,D=()=>y().dataset.orientation===`vertical`?`vertical`:`horizontal`,O=e=>{let t=e.getBoundingClientRect();return D()===`horizontal`?t.width:t.height},k=()=>{let e=b(),t=e.map(({props:e})=>e.id);if(t.some(e=>!e))throw Error(`Every Panel requires a stable id.`);if(new Set(t).size!==t.length)throw Error(`Panel ids must be unique within a Panels group.`);if(e.length>0&&!e.some(({props:e})=>e.size===`fill`))throw Error(`A Panels group requires at least one size="fill" Panel.`);if(e.some(({props:e})=>e.size===`fill`&&e.resize!==`none`))throw Error(`A size="fill" Panel cannot own a resize handle.`);return{ids:e.map(({props:e})=>e.id).filter(Boolean),collapsibleIds:e.filter(({props:e})=>e.id&&e.collapsible).map(({props:e})=>e.id),sizableIds:e.filter(({props:e})=>e.id&&e.size!==`fill`).map(({props:e})=>e.id),resizableIds:e.filter(({props:e})=>e.id&&e.size!==`fill`&&e.resize!==`none`).map(({props:e})=>e.id),authoredCollapsedIds:e.filter(({props:e})=>e.id&&e.collapsible&&e.defaultCollapsed).map(({props:e})=>e.id)}},A=e=>{let t=document.createElement(`div`);t.style.cssText=`position:absolute;visibility:hidden;pointer-events:none;inset:0 auto auto 0;`,D()===`horizontal`?t.style.width=`var(${e})`:t.style.height=`var(${e})`,y().append(t);let n=O(t);return t.remove(),n},j=e=>e.props.size===`fill`?{minimum:0,maximum:1/0}:{minimum:A(`--spacing-panel-${e.props.size}-min`),maximum:A(`--spacing-panel-${e.props.size}-max`)},M=(e,t)=>{let{minimum:n,maximum:r}=j(e);return Math.min(r,Math.max(n,t))},N=()=>{let e=k();return{collection:{ids:e.ids,collapsibleIds:e.collapsibleIds,sizableIds:e.sizableIds,resizableIds:e.resizableIds},layout:{collapsedIds:[...e.authoredCollapsedIds],committedSizes:{}},authored:{collapsedIds:e.authoredCollapsedIds},change:{openingIds:[],closingIds:[]},resize:{activeId:``,initialSize:null,previewSize:null},sizing:{changes:[]}}},P=(e,t,n)=>{D()===`horizontal`?(e.style.minWidth=t,e.style.maxWidth=n,e.style.minHeight=``,e.style.maxHeight=``):(e.style.minHeight=t,e.style.maxHeight=n,e.style.minWidth=``,e.style.maxWidth=``)},F=e=>{e.style.flex=``,e.style.minWidth=``,e.style.maxWidth=``,e.style.minHeight=``,e.style.maxHeight=``},I=(e,t)=>{if(T()){F(e.panel);return}if(t!==void 0){e.panel.style.flex=`0 0 ${t}px`,P(e.panel,`0px`,`none`);return}if(w(e.props.id)){if(S().authored.collapsedIds.includes(e.props.id)){F(e.panel);return}let t=e.collapsed?`var(--spacing-panel-collapsed)`:`0px`;e.panel.style.flex=`0 0 ${t}`,P(e.panel,t,t);return}if(e.props.size===`fill`){F(e.panel);return}let n=S().resize.activeId===e.props.id?S().resize.previewSize:S().layout.committedSizes[e.props.id];if(n==null){F(e.panel);return}let r=`${M(e,n)}px`;e.panel.style.flex=`0 1 ${r}`,P(e.panel,`var(--spacing-panel-${e.props.size}-min)`,`var(--spacing-panel-${e.props.size}-max)`)},L=(e,t)=>{e.toggleAttribute(`inert`,t),e.setAttribute(`aria-hidden`,t?`true`:`false`)},R=e=>{let t=C(),n=E(),r=w(e.props.id),i=Q.hasTag(`changing`)&&S().change.openingIds.includes(e.props.id),a=Q.hasTag(`changing`)&&S().change.closingIds.includes(e.props.id),o=!(r&&!a),s=r&&!a&&!i&&e.collapsed!==null;if(e.panel.dataset.state=r?`collapsed`:`expanded`,e.panel.dataset.orientation=n,e.panel.dataset.size=e.props.size,e.panel.dataset.resize=e.props.resize,e.panel.className=f({part:B.parts.panel,props:{orientation:n,divider:t.divider,resize:e.props.resize},className:e.props.class}),l({el:e.panel,attr:`data-collapsible`,present:e.props.collapsible}),l({el:e.panel,attr:`data-resizing`,present:S().resize.activeId===e.props.id}),I(e),e.expanded.hidden=!o,L(e.expanded,!o),e.collapsed&&(e.collapsed.hidden=!s,L(e.collapsed,!s)),e.handle){let t=T()||r||e.props.size===`fill`||e.props.resize===`none`;e.handle.dataset.orientation=n,e.handle.dataset.resizeEdge=e.props.resize,e.handle.setAttribute(`aria-label`,`Resize ${e.props.id} panel`),e.handle.toggleAttribute(`data-resize-disabled`,t),e.handle.hidden=T(),e.handle.className=f({part:B.parts.resizeHandle,props:{orientation:n,edge:e.props.resize},className:e.handle.dataset.class??``})}},z=e=>{e.forEach((t,n)=>{let r=e[n+1],i=t.props.resize===`end`||r?.props.resize===`start`;l({el:t.panel,attr:`data-divider`,present:C().divider&&r!==void 0&&!i})})},H=e=>{let t=e.dataset.target||``;if(!t){let t=e.closest(`[data-ui-panel]`),n=t?.closest(`[data-ui-panels]`),r=[...V].find(e=>e.id===n?.id),i=t&&r===$?x(t.id):null;return i&&r?{record:i,controller:r}:null}let n=e.dataset.groupId||e.closest(`[data-ui-panels]`)?.id,r=[...V].filter(e=>!n||e.id===n).find(e=>e.hasPanel(t)),i=r===$?x(t):null;return i&&r?{record:i,controller:r}:null},W=()=>{document.querySelectorAll(`[data-ui-panel-toggle]`).forEach(e=>{let t=H(e);if(!t||t.controller!==$)return;let n=w(t.record.props.id);e.dataset.target=t.record.props.id,e.dataset.groupId=C().id,e.dataset.state=n?`collapsed`:`expanded`,e.setAttribute(`aria-controls`,t.record.panel.id),e.setAttribute(`aria-expanded`,n?`false`:`true`),e.toggleAttribute(`disabled`,!t.record.props.collapsible)})},G=()=>{let e=C(),t=E();y().dataset.responsiveMode=o,y().dataset.layoutOrientation=t,y().style.flexDirection=t===`horizontal`?`row`:`column`,y().className=f({part:B.parts.root,props:{...e,orientation:t},className:e.class}),l({el:y(),attr:`data-resizing`,present:Q.hasTag(`resizing`)}),l({el:y(),attr:`data-transitioning`,present:Q.hasTag(`transitioning`)});let n=b();n.forEach(R),z(n),W()},pe=(e,t=!1)=>{let n=document.activeElement;if(!t&&(!(n instanceof HTMLElement)||!e.collapsed?.contains(n)))return;let r=_.get(e.props.id);r?.isConnected&&e.expanded.contains(r)?r.focus({preventScroll:!0}):(e.expanded.tabIndex=-1,e.expanded.focus({preventScroll:!0}))},K=(e,t=!1)=>{let n=document.activeElement;if(!t&&(!(n instanceof HTMLElement)||!e.expanded.contains(n)))return;let r=e.collapsed?re(e.collapsed)[0]:void 0,i=v.get(e.props.id),a=i?.isConnected&&!e.panel.contains(i)?i:void 0;r?r.focus({preventScroll:!0}):a?a.focus({preventScroll:!0}):(y().tabIndex=-1,y().focus({preventScroll:!0}))},me=()=>{let e=[...S().change.openingIds,...S().change.closingIds],t=new Set(S().change.openingIds.filter(e=>{let t=x(e),n=document.activeElement;return t!==null&&t.collapsed!==null&&n instanceof HTMLElement&&t.collapsed.contains(n)})),n=new Map(e.flatMap(e=>{let t=x(e);if(!t)return[];if(S().change.closingIds.includes(e)){let n=document.activeElement;n instanceof HTMLElement&&t.expanded.contains(n)&&_.set(e,n)}return[[e,O(t.panel)]]}));G(),S().change.openingIds.forEach(e=>{let n=x(e);n&&pe(n,t.has(e))}),e.forEach(e=>{let t=x(e),r=n.get(e);if(!t||r===void 0)return;let i=O(t.panel);h.set(e,{from:r,to:i}),I(t,r)})},he=()=>{let e=[...S().change.openingIds],t=[...S().change.closingIds],n=new Set(t.filter(e=>{let t=x(e),n=document.activeElement;return t!==null&&n instanceof HTMLElement&&t.expanded.contains(n)}));b().forEach(e=>I(e)),G(),t.forEach(e=>{let t=x(e);t&&K(t,n.has(e))}),e.forEach(e=>q(`ui:panel-expand`,e)),t.forEach(e=>q(`ui:panel-collapse`,e)),[...e,...t].forEach(e=>h.delete(e))},q=(e,t,n={})=>{c({el:y(),name:e,detail:{groupId:C().id,panelId:t,__panelsNotification:!0,...n}})},ge=()=>{let e=S().layout;if(C().persist)try{localStorage.setItem(U(C().id),JSON.stringify({collapsed:e.collapsedIds,sizes:e.committedSizes}))}catch{}c({el:y(),name:`ui:panels-layout-change`,detail:{groupId:C().id,collapsed:[...e.collapsedIds],sizes:{...e.committedSizes},__panelsNotification:!0}})},J=e=>{if(!n)return;if(Q.hasTag(`stable`)){e();return}let t=window.setTimeout(()=>{d.delete(t),J(e)},16);d.add(t)},Y=(e,t)=>{let n=e.find(e=>t(e)!==w(e));n&&(Q.send({type:t(n)?`COLLAPSE`:`EXPAND`,panelId:n}),J(()=>Y(e,t)))},_e=()=>{if(!C().persist)return;let e;try{e=JSON.parse(localStorage.getItem(U(C().id))??`null`)}catch{return}if(typeof e!=`object`||!e)return;let t=k(),n=new Set((Array.isArray(e.collapsed)?e.collapsed:[]).filter(e=>typeof e==`string`&&t.collapsibleIds.includes(e))),r=fe(e.sizes),i=()=>{Y(t.collapsibleIds,e=>n.has(e))},a=()=>{let e=t.sizableIds.flatMap(e=>{let t=x(e),n=r[e];if(!t||n===void 0)return[];let i=O(t.panel),a=M(t,n);return Math.abs(i-a)<.5?[]:[{panelId:e,from:i,to:a}]});if(T()){e.length>0&&Q.send({type:`RESTORE_HIDDEN_SIZES`,changes:e}),i();return}let n=e.filter(({panelId:e})=>w(e)),a=e.filter(({panelId:e})=>!w(e));if(n.length>0&&Q.send({type:`RESTORE_HIDDEN_SIZES`,changes:n}),a.length>0){Q.send({type:`SIZE`,changes:a}),J(i);return}i()},o=t.collapsibleIds.filter(e=>w(e)&&!n.has(e));o.length>0?(Y(o,()=>!1),J(a)):a()},ve=()=>{let e=requestAnimationFrame(()=>{p.delete(e);let t=requestAnimationFrame(()=>{p.delete(t),_e()});p.add(t)});p.add(e)},ye=e=>{let t=k(),n=e?t.ids.filter(t=>t===e):t.ids;if(n.length===0)return;let r=()=>{Y(n.filter(e=>t.collapsibleIds.includes(e)),e=>S().authored.collapsedIds.includes(e))},i=n.filter(e=>t.sizableIds.includes(e)&&Object.hasOwn(S().layout.committedSizes,e));if(T()){i.length>0?(Q.send({type:`RESET_HIDDEN_SIZES`,ids:i}),J(r)):r();return}let a=i.filter(w);a.length>0&&Q.send({type:`RESET_HIDDEN_SIZES`,ids:a});let o=i.filter(e=>!w(e)).flatMap(e=>{let t=x(e);return!t||t.props.size===`fill`?[]:[{panelId:e,from:O(t.panel),to:A(`--spacing-panel-${t.props.size}`),reset:!0}]});if(o.length>0){Q.send({type:`SIZE`,changes:o}),J(r);return}r()},be=()=>{S().sizing.changes.forEach(({panelId:e,from:t})=>{let n=x(e);n&&I(n,t)})},xe=()=>{S().sizing.changes.forEach(({panelId:e,to:t})=>{let n=x(e);n&&(I(n),q(`ui:panel-resize-end`,e,{size:t}))}),G()},Se=e=>{if(E()===`vertical`)return e===`start`?`negative`:`positive`;let t=s({el:y()});return e===`start`?t?`positive`:`negative`:t?`negative`:`positive`},X=()=>{let e=new Set(b().map(({panel:e})=>e));m.forEach((t,n)=>{e.has(n)||(t(),m.delete(n))}),b().forEach(e=>{if(m.has(e.panel)||!e.handle||e.props.size===`fill`||e.props.resize===`none`)return;let t=j(e),n=A(`--spacing-panel-resize-handle`),r=A(`--spacing-panel-resize-handle-coarse`);m.set(e.panel,ae({element:e.panel,handle:e.handle,axis:E()===`horizontal`?`x`:`y`,direction:Se(e.props.resize),min:t.minimum,max:t.maximum,mode:`onChange`,hitArea:n,coarseHitArea:r,disabled:()=>T()||w(e.props.id),onStart:t=>Q.send({type:`RESIZE_START`,panelId:e.props.id,size:Z(t)}),onResize:t=>Q.send({type:`RESIZE`,panelId:e.props.id,size:Z(t)}),onEnd:t=>Q.send({type:`RESIZE_END`,panelId:e.props.id,size:Z(t)})}))})},Ce=()=>{m.forEach(e=>e()),m.clear(),X()},Z=e=>E()===`horizontal`?e.previewWidth:e.previewHeight,we=e=>{let t=C().orientation===`horizontal`&&e<g(y(),`sm`)?`stacked`:`wide`;t!==o&&(o=t,G(),Ce())},Q=te({schema:se,hooks:le,resolveTransitionElement:({data:e})=>{let t=e?.panelId;return t?x(t)?.panel??null:y()},createMachine:({props:e})=>ue({props:e,context:N(),effects:{prepareChange:me,finishChange:he,sync:()=>{G(),Ce()},beginResize:()=>{G()},previewResize:()=>{let e=S().resize.activeId,t=x(e);t&&I(t);let n=S().resize.previewSize;n!==null&&q(`ui:panel-resize`,e,{size:n})},commitResize:e=>{G();let t=typeof e.event.panelId==`string`?e.event.panelId:``,n=S().layout.committedSizes[t];t&&n!==void 0&&q(`ui:panel-resize-end`,t,{size:n})},cancelResize:G,prepareSizing:be,finishSizing:xe,persist:ge}})}),Te=()=>{let e=k();Q.send({type:`PANELS_CHANGED`,...e}),X()},Ee=()=>{i=ie({targets:y(),read:k,onChange:Te,observer:{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`id`,`data-size`,`data-resize`,`data-collapsible`,`data-default-collapsed`]}})},$;return $={...Q,get id(){return y().id||C().id},get orientation(){return E()},get collapsed(){return[...S().layout.collapsedIds]},get sizes(){return{...S().layout.committedSizes}},get root(){let e=this.snapshot.current?.props??C();return ne({inputs:[f({part:B.parts.root,props:e,className:e.class}),{"data-ui-panels":``}]})},init(){n=this.$el,Q.connect(this.$el,this.snapshot),y().id||=C().id,o=C().orientation===`horizontal`&&y().getBoundingClientRect().width<g(y(),`sm`)?`stacked`:`wide`,V.add($),de(),G(),X(),a=new ResizeObserver(e=>{we(e[0]?.contentRect.width??y().clientWidth)}),a.observe(y()),Ee(),C().persist&&ve(),u.push(ee({target:y(),event:`keydown`,handler:()=>W()}))},destroy(){V.delete($),i?.(),i=null,a?.disconnect(),a=null,m.forEach(e=>e()),m.clear(),u.forEach(e=>e()),u=[],d.forEach(e=>window.clearTimeout(e)),d.clear(),p.forEach(e=>cancelAnimationFrame(e)),p.clear(),Q.disconnect(),n=null},transitionPanel(n){let r=n.data.panelId,i=x(r),a=h.get(r);return!i||!a||a.from===a.to?(i&&I(i,a?.to),e()):t(n,{target:i.panel,keyframes:{flexBasis:[`${a.from}px`,`${a.to}px`]},role:`layout`,cleanup:()=>I(i)})},transitionPanelSize(n){let{panelId:r,from:i,to:a}=n.data,o=x(r);return!o||i===a?(o&&I(o),e()):t(n,{target:o.panel,keyframes:{flexBasis:[`${i}px`,`${a}px`]},role:`layoutQuick`,cleanup:()=>I(o)})},hasPanel(e){return x(e)!==null},isCollapsed:w,collapse(e){Q.send({type:`COLLAPSE`,panelId:e})},expand(e){Q.send({type:`EXPAND`,panelId:e})},toggle(e){Q.send({type:`TOGGLE`,panelId:e})},resize(e,t){let n=x(e);if(T()||!n||n.props.size===`fill`||w(e)||!Number.isFinite(t))return;let r=O(n.panel),i=M(n,t);Math.abs(r-i)<.5||Q.send({type:`SIZE`,panelId:e,from:r,to:i})},reset(e){ye(e)},perform(e,t,n){n&&v.set(t,n),{collapse:this.collapse,expand:this.expand,toggle:this.toggle}[e](t)},syncToggles:W},$},G=()=>{let e={};return{get props(){return e},init(){e=r({el:this.$el,schema:x})},destroy(){},get root(){return ne({inputs:[f({part:B.parts.toggle,props:{},className:e.class}),{"data-ui-panel-toggle":``,":data-target":()=>e.target||void 0,":data-action":()=>e.action,"@click":e=>this.trigger(e)}]})},trigger(t){t?.preventDefault();let n=this.$el,r=n.closest(`[data-ui-panel]`),i=r?.closest(`[data-ui-panels]`),a=e.target||r?.id||``;a&&document.dispatchEvent(new CustomEvent(`ui:panel-toggle`,{detail:{panelId:a,groupId:i?.id,action:e.action,trigger:n}}))}}},pe=e=>{d(`UiPanels`,W)(e),d(`UiPanelToggle`,G)(e)},K=new WeakSet,me=e=>{K.has(e)||(K.add(e),n(e),h(e),pe(e))};export{G as n,W as r,me as t};
2
- //# sourceMappingURL=entry.generated-BYDBzadH.js.map