silver-ui 0.5.0 → 0.7.1

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 (520) hide show
  1. package/README.md +2 -65
  2. package/dist/{chunk-XHJRAEGW.js → chunk-223UOU3H.js} +5 -5
  3. package/dist/{chunk-XHJRAEGW.js.map → chunk-223UOU3H.js.map} +1 -1
  4. package/dist/{chunk-67UUGI3M.cjs → chunk-2AOR4EVA.cjs} +8 -8
  5. package/dist/{chunk-67UUGI3M.cjs.map → chunk-2AOR4EVA.cjs.map} +1 -1
  6. package/dist/{chunk-75KSHZTV.js → chunk-2KLTODOC.js} +7 -7
  7. package/dist/{chunk-75KSHZTV.js.map → chunk-2KLTODOC.js.map} +1 -1
  8. package/dist/chunk-2N3PIXZ5.cjs +165 -0
  9. package/dist/chunk-2N3PIXZ5.cjs.map +1 -0
  10. package/dist/{chunk-W5F7PYT2.js → chunk-3PCXFOOS.js} +17 -11
  11. package/dist/chunk-3PCXFOOS.js.map +1 -0
  12. package/dist/chunk-3PEK2Q54.cjs +31 -0
  13. package/dist/chunk-3PEK2Q54.cjs.map +1 -0
  14. package/dist/{chunk-GW6P4FJ4.cjs → chunk-4MIIXRZN.cjs} +25 -40
  15. package/dist/chunk-4MIIXRZN.cjs.map +1 -0
  16. package/dist/{chunk-CUHJDV6K.js → chunk-4NPVIEWF.js} +6 -6
  17. package/dist/{chunk-CUHJDV6K.js.map → chunk-4NPVIEWF.js.map} +1 -1
  18. package/dist/{chunk-ADSG24VE.js → chunk-4UYMGEBF.js} +6 -6
  19. package/dist/{chunk-ADSG24VE.js.map → chunk-4UYMGEBF.js.map} +1 -1
  20. package/dist/{chunk-ECDYAZ2R.js → chunk-54B36CSW.js} +5 -5
  21. package/dist/{chunk-ECDYAZ2R.js.map → chunk-54B36CSW.js.map} +1 -1
  22. package/dist/chunk-5FQKELP6.js +28 -0
  23. package/dist/chunk-5FQKELP6.js.map +1 -0
  24. package/dist/{chunk-RJEZBOSH.js → chunk-5GSRIOXE.js} +24 -14
  25. package/dist/chunk-5GSRIOXE.js.map +1 -0
  26. package/dist/{chunk-OUZX7STE.cjs → chunk-5K3C3INR.cjs} +25 -53
  27. package/dist/chunk-5K3C3INR.cjs.map +1 -0
  28. package/dist/{chunk-AEYJ6PWC.js → chunk-5RFHYDQY.js} +16 -11
  29. package/dist/chunk-5RFHYDQY.js.map +1 -0
  30. package/dist/{chunk-E42WOTIC.js → chunk-6KG76KUZ.js} +3 -3
  31. package/dist/{chunk-E42WOTIC.js.map → chunk-6KG76KUZ.js.map} +1 -1
  32. package/dist/{chunk-I47WOF6E.js → chunk-6KGF66TR.js} +3 -3
  33. package/dist/{chunk-I47WOF6E.js.map → chunk-6KGF66TR.js.map} +1 -1
  34. package/dist/{chunk-TOQ4MGM5.js → chunk-6R2UZNVE.js} +6 -6
  35. package/dist/{chunk-TOQ4MGM5.js.map → chunk-6R2UZNVE.js.map} +1 -1
  36. package/dist/{chunk-BIJ6YDWJ.cjs → chunk-6SFMORQF.cjs} +15 -8
  37. package/dist/chunk-6SFMORQF.cjs.map +1 -0
  38. package/dist/{chunk-H4L456EW.js → chunk-6SKIBUCY.js} +12 -5
  39. package/dist/chunk-6SKIBUCY.js.map +1 -0
  40. package/dist/{chunk-ANACERIO.cjs → chunk-6SMVH3ON.cjs} +6 -6
  41. package/dist/{chunk-ANACERIO.cjs.map → chunk-6SMVH3ON.cjs.map} +1 -1
  42. package/dist/{chunk-ESRDHDYN.cjs → chunk-6ZPHID26.cjs} +9 -9
  43. package/dist/{chunk-ESRDHDYN.cjs.map → chunk-6ZPHID26.cjs.map} +1 -1
  44. package/dist/{chunk-SUT35RHA.cjs → chunk-76GVUEFH.cjs} +8 -8
  45. package/dist/{chunk-SUT35RHA.cjs.map → chunk-76GVUEFH.cjs.map} +1 -1
  46. package/dist/chunk-7VUDE5BI.js +91 -0
  47. package/dist/chunk-7VUDE5BI.js.map +1 -0
  48. package/dist/{chunk-Q3HMGFGI.js → chunk-7WQW7H3D.js} +98 -77
  49. package/dist/chunk-7WQW7H3D.js.map +1 -0
  50. package/dist/chunk-A2AC6WL5.cjs +4 -0
  51. package/dist/chunk-A2AC6WL5.cjs.map +1 -0
  52. package/dist/{chunk-2Y7ULSEU.js → chunk-A4QLLTMD.js} +17 -17
  53. package/dist/{chunk-2Y7ULSEU.js.map → chunk-A4QLLTMD.js.map} +1 -1
  54. package/dist/{chunk-HWD4HDQ5.cjs → chunk-AC4E3WQA.cjs} +10 -10
  55. package/dist/{chunk-HWD4HDQ5.cjs.map → chunk-AC4E3WQA.cjs.map} +1 -1
  56. package/dist/chunk-AFXU6XIS.js +3 -0
  57. package/dist/chunk-AFXU6XIS.js.map +1 -0
  58. package/dist/{chunk-L5PJCLV6.js → chunk-AKAXQ4RL.js} +16 -25
  59. package/dist/chunk-AKAXQ4RL.js.map +1 -0
  60. package/dist/{chunk-AV7D3SXF.js → chunk-AO4RVSCG.js} +4 -4
  61. package/dist/{chunk-AV7D3SXF.js.map → chunk-AO4RVSCG.js.map} +1 -1
  62. package/dist/{chunk-OERNLR2P.js → chunk-AX653SYJ.js} +8 -8
  63. package/dist/{chunk-OERNLR2P.js.map → chunk-AX653SYJ.js.map} +1 -1
  64. package/dist/{chunk-4HXNBLCJ.js → chunk-AXTX3IOR.js} +3 -3
  65. package/dist/{chunk-4HXNBLCJ.js.map → chunk-AXTX3IOR.js.map} +1 -1
  66. package/dist/{chunk-2AWSJF22.js → chunk-BNGYGCT2.js} +8 -8
  67. package/dist/chunk-BNGYGCT2.js.map +1 -0
  68. package/dist/{chunk-PGTOVMP7.cjs → chunk-BPAZTKMC.cjs} +10 -10
  69. package/dist/{chunk-PGTOVMP7.cjs.map → chunk-BPAZTKMC.cjs.map} +1 -1
  70. package/dist/{chunk-7CTHD4G6.cjs → chunk-BYV7NXC5.cjs} +5 -5
  71. package/dist/{chunk-7CTHD4G6.cjs.map → chunk-BYV7NXC5.cjs.map} +1 -1
  72. package/dist/{chunk-3Z5PF75J.cjs → chunk-CKDB7QNT.cjs} +29 -19
  73. package/dist/chunk-CKDB7QNT.cjs.map +1 -0
  74. package/dist/{chunk-3VJIUZAY.cjs → chunk-CVT7JW6C.cjs} +16 -25
  75. package/dist/chunk-CVT7JW6C.cjs.map +1 -0
  76. package/dist/{chunk-6DAZ2ZOW.cjs → chunk-CWZCBYVZ.cjs} +11 -11
  77. package/dist/{chunk-6DAZ2ZOW.cjs.map → chunk-CWZCBYVZ.cjs.map} +1 -1
  78. package/dist/{chunk-N77K3NQY.cjs → chunk-DTNIUZ3C.cjs} +7 -7
  79. package/dist/{chunk-N77K3NQY.cjs.map → chunk-DTNIUZ3C.cjs.map} +1 -1
  80. package/dist/{chunk-X4I5YARV.cjs → chunk-DUGGZUJP.cjs} +11 -11
  81. package/dist/{chunk-X4I5YARV.cjs.map → chunk-DUGGZUJP.cjs.map} +1 -1
  82. package/dist/{chunk-TTDNCN5G.cjs → chunk-DVCDAKPK.cjs} +13 -39
  83. package/dist/chunk-DVCDAKPK.cjs.map +1 -0
  84. package/dist/{chunk-2RZNX26F.cjs → chunk-DXUFDJHA.cjs} +12 -13
  85. package/dist/chunk-DXUFDJHA.cjs.map +1 -0
  86. package/dist/{chunk-4SUQFPWH.js → chunk-E6AKSBSP.js} +6 -6
  87. package/dist/{chunk-4SUQFPWH.js.map → chunk-E6AKSBSP.js.map} +1 -1
  88. package/dist/{chunk-THTVYP5V.js → chunk-EBV3EX3J.js} +21 -32
  89. package/dist/chunk-EBV3EX3J.js.map +1 -0
  90. package/dist/{chunk-JM4Q7ZQH.cjs → chunk-EEOUWM2F.cjs} +8 -8
  91. package/dist/chunk-EEOUWM2F.cjs.map +1 -0
  92. package/dist/{chunk-KC4EKXGF.js → chunk-EIJSWHG7.js} +9 -10
  93. package/dist/chunk-EIJSWHG7.js.map +1 -0
  94. package/dist/{chunk-IGJEZLHP.cjs → chunk-EQFSDFV2.cjs} +19 -19
  95. package/dist/{chunk-IGJEZLHP.cjs.map → chunk-EQFSDFV2.cjs.map} +1 -1
  96. package/dist/chunk-ESWYWWY2.js +162 -0
  97. package/dist/chunk-ESWYWWY2.js.map +1 -0
  98. package/dist/{chunk-UXGHFKLA.js → chunk-FHUOUARL.js} +4 -4
  99. package/dist/{chunk-UXGHFKLA.js.map → chunk-FHUOUARL.js.map} +1 -1
  100. package/dist/{chunk-HNDDNW52.js → chunk-FTNEAX24.js} +3 -3
  101. package/dist/{chunk-HNDDNW52.js.map → chunk-FTNEAX24.js.map} +1 -1
  102. package/dist/{chunk-JJNXQ7EL.js → chunk-FUU3I22W.js} +3 -3
  103. package/dist/{chunk-JJNXQ7EL.js.map → chunk-FUU3I22W.js.map} +1 -1
  104. package/dist/{chunk-OF5NULAO.js → chunk-GFMQIR5U.js} +7 -7
  105. package/dist/{chunk-OF5NULAO.js.map → chunk-GFMQIR5U.js.map} +1 -1
  106. package/dist/{chunk-JSAYTQTJ.cjs → chunk-GJZAGTPV.cjs} +7 -7
  107. package/dist/chunk-GJZAGTPV.cjs.map +1 -0
  108. package/dist/{chunk-J2YKUHQM.js → chunk-GKYGZWSQ.js} +14 -23
  109. package/dist/chunk-GKYGZWSQ.js.map +1 -0
  110. package/dist/{chunk-2F5TDBRT.cjs → chunk-GLFWSLJB.cjs} +8 -8
  111. package/dist/{chunk-2F5TDBRT.cjs.map → chunk-GLFWSLJB.cjs.map} +1 -1
  112. package/dist/{chunk-S5CMLG2E.js → chunk-GTZQT6MK.js} +9 -5
  113. package/dist/chunk-GTZQT6MK.js.map +1 -0
  114. package/dist/{chunk-4RDA4W4N.js → chunk-HEF53COU.js} +23 -7
  115. package/dist/chunk-HEF53COU.js.map +1 -0
  116. package/dist/{chunk-WPMWHKJX.js → chunk-I2DXEPDF.js} +5 -5
  117. package/dist/{chunk-WPMWHKJX.js.map → chunk-I2DXEPDF.js.map} +1 -1
  118. package/dist/{chunk-Z7OUMVR5.cjs → chunk-I4XYOJJS.cjs} +9 -9
  119. package/dist/{chunk-Z7OUMVR5.cjs.map → chunk-I4XYOJJS.cjs.map} +1 -1
  120. package/dist/{chunk-HWP2UGOC.cjs → chunk-IE7GWY4E.cjs} +126 -105
  121. package/dist/chunk-IE7GWY4E.cjs.map +1 -0
  122. package/dist/{chunk-YDNEAHVK.cjs → chunk-IH6DJWYH.cjs} +37 -37
  123. package/dist/{chunk-YDNEAHVK.cjs.map → chunk-IH6DJWYH.cjs.map} +1 -1
  124. package/dist/{chunk-D5OX6II7.cjs → chunk-IREOTHD3.cjs} +8 -8
  125. package/dist/chunk-IREOTHD3.cjs.map +1 -0
  126. package/dist/{chunk-L7XJZJCM.js → chunk-J4MQQ4K5.js} +5 -5
  127. package/dist/{chunk-L7XJZJCM.js.map → chunk-J4MQQ4K5.js.map} +1 -1
  128. package/dist/{chunk-UARQIMPS.js → chunk-JFLU2X5Q.js} +5 -5
  129. package/dist/{chunk-UARQIMPS.js.map → chunk-JFLU2X5Q.js.map} +1 -1
  130. package/dist/{chunk-VH3G4IUX.js → chunk-JMVYWHJ7.js} +12 -38
  131. package/dist/chunk-JMVYWHJ7.js.map +1 -0
  132. package/dist/{chunk-K4K4FU3D.cjs → chunk-JTPVAZE6.cjs} +11 -11
  133. package/dist/{chunk-K4K4FU3D.cjs.map → chunk-JTPVAZE6.cjs.map} +1 -1
  134. package/dist/{chunk-LW3DJOF4.cjs → chunk-JWMS6LHN.cjs} +6 -6
  135. package/dist/{chunk-LW3DJOF4.cjs.map → chunk-JWMS6LHN.cjs.map} +1 -1
  136. package/dist/{chunk-EBJPUXFQ.js → chunk-KEPCKSDE.js} +31 -11
  137. package/dist/chunk-KEPCKSDE.js.map +1 -0
  138. package/dist/{chunk-I2NG2P5K.cjs → chunk-KLPVBJGZ.cjs} +5 -5
  139. package/dist/{chunk-I2NG2P5K.cjs.map → chunk-KLPVBJGZ.cjs.map} +1 -1
  140. package/dist/{chunk-6PIVWNUR.js → chunk-KWZMXX4F.js} +5 -5
  141. package/dist/chunk-KWZMXX4F.js.map +1 -0
  142. package/dist/{chunk-3IYM5MAC.js → chunk-L747HIHG.js} +4 -4
  143. package/dist/{chunk-3IYM5MAC.js.map → chunk-L747HIHG.js.map} +1 -1
  144. package/dist/{chunk-HIH6MS5D.js → chunk-LBOWHXOF.js} +24 -6
  145. package/dist/chunk-LBOWHXOF.js.map +1 -0
  146. package/dist/{chunk-ZPJW3PP7.cjs → chunk-LTHPJRFK.cjs} +18 -10
  147. package/dist/chunk-LTHPJRFK.cjs.map +1 -0
  148. package/dist/{chunk-F7BFO3SD.cjs → chunk-LWB2CTX6.cjs} +24 -8
  149. package/dist/chunk-LWB2CTX6.cjs.map +1 -0
  150. package/dist/{chunk-FCUUGJTM.cjs → chunk-MJHEPDDX.cjs} +132 -160
  151. package/dist/chunk-MJHEPDDX.cjs.map +1 -0
  152. package/dist/{chunk-QO5C7TIV.js → chunk-MUXUHIIV.js} +5 -5
  153. package/dist/{chunk-QO5C7TIV.js.map → chunk-MUXUHIIV.js.map} +1 -1
  154. package/dist/{chunk-L5JS6P62.cjs → chunk-MYSLJWCW.cjs} +14 -10
  155. package/dist/chunk-MYSLJWCW.cjs.map +1 -0
  156. package/dist/{chunk-65MJZYO6.js → chunk-N6C37HXD.js} +14 -29
  157. package/dist/chunk-N6C37HXD.js.map +1 -0
  158. package/dist/{chunk-VO4FG3L2.cjs → chunk-NGNVNRAZ.cjs} +17 -17
  159. package/dist/{chunk-VO4FG3L2.cjs.map → chunk-NGNVNRAZ.cjs.map} +1 -1
  160. package/dist/{chunk-2WTHSGDP.cjs → chunk-NMC7QG2X.cjs} +14 -14
  161. package/dist/{chunk-2WTHSGDP.cjs.map → chunk-NMC7QG2X.cjs.map} +1 -1
  162. package/dist/{chunk-6EYLEVC6.js → chunk-NSWKBWPP.js} +15 -7
  163. package/dist/chunk-NSWKBWPP.js.map +1 -0
  164. package/dist/{chunk-FNRYGCO3.js → chunk-NYOZQE6P.js} +4 -4
  165. package/dist/{chunk-FNRYGCO3.js.map → chunk-NYOZQE6P.js.map} +1 -1
  166. package/dist/{chunk-GSTINE4X.js → chunk-O3UT5D57.js} +1775 -575
  167. package/dist/chunk-O3UT5D57.js.map +1 -0
  168. package/dist/{chunk-BSI4BQEX.cjs → chunk-OCYZKZ24.cjs} +4 -4
  169. package/dist/{chunk-BSI4BQEX.cjs.map → chunk-OCYZKZ24.cjs.map} +1 -1
  170. package/dist/{chunk-LBGC6EC5.js → chunk-OP6WQYYP.js} +15 -15
  171. package/dist/chunk-OP6WQYYP.js.map +1 -0
  172. package/dist/{chunk-TSKFGLGQ.cjs → chunk-OX2FNKIV.cjs} +18 -27
  173. package/dist/chunk-OX2FNKIV.cjs.map +1 -0
  174. package/dist/chunk-PG4CZRTU.js +77 -0
  175. package/dist/chunk-PG4CZRTU.js.map +1 -0
  176. package/dist/{chunk-TH537HOM.js → chunk-PQXPYN23.js} +6 -6
  177. package/dist/{chunk-TH537HOM.js.map → chunk-PQXPYN23.js.map} +1 -1
  178. package/dist/{chunk-U5M4JZBX.js → chunk-PYN75QAG.js} +6 -6
  179. package/dist/chunk-PYN75QAG.js.map +1 -0
  180. package/dist/{chunk-JS6MRT6M.js → chunk-QM7NQK2K.js} +4 -4
  181. package/dist/{chunk-JS6MRT6M.js.map → chunk-QM7NQK2K.js.map} +1 -1
  182. package/dist/{chunk-SUWRSJAN.cjs → chunk-RLIBY7XB.cjs} +16 -11
  183. package/dist/chunk-RLIBY7XB.cjs.map +1 -0
  184. package/dist/chunk-RNUQWYJJ.cjs +93 -0
  185. package/dist/chunk-RNUQWYJJ.cjs.map +1 -0
  186. package/dist/{chunk-GY2ZZR4Z.cjs → chunk-RUQODCTW.cjs} +18 -18
  187. package/dist/{chunk-GY2ZZR4Z.cjs.map → chunk-RUQODCTW.cjs.map} +1 -1
  188. package/dist/{chunk-FFF57VHO.cjs → chunk-RX2FXCIH.cjs} +8 -8
  189. package/dist/{chunk-FFF57VHO.cjs.map → chunk-RX2FXCIH.cjs.map} +1 -1
  190. package/dist/{chunk-EFBSEJBD.js → chunk-S4WWBV4N.js} +22 -47
  191. package/dist/chunk-S4WWBV4N.js.map +1 -0
  192. package/dist/{chunk-J3X465QT.cjs → chunk-SY2A4K6P.cjs} +9 -9
  193. package/dist/{chunk-J3X465QT.cjs.map → chunk-SY2A4K6P.cjs.map} +1 -1
  194. package/dist/{chunk-YJEX32HZ.cjs → chunk-U7QJJ3NR.cjs} +8 -8
  195. package/dist/{chunk-YJEX32HZ.cjs.map → chunk-U7QJJ3NR.cjs.map} +1 -1
  196. package/dist/{chunk-XZZI3JYK.cjs → chunk-UJDHRILS.cjs} +26 -8
  197. package/dist/chunk-UJDHRILS.cjs.map +1 -0
  198. package/dist/{chunk-IX26TMZD.cjs → chunk-UNS7OCEA.cjs} +5 -5
  199. package/dist/{chunk-IX26TMZD.cjs.map → chunk-UNS7OCEA.cjs.map} +1 -1
  200. package/dist/{chunk-RRXOSNCX.cjs → chunk-UR5EWWWL.cjs} +11 -11
  201. package/dist/{chunk-RRXOSNCX.cjs.map → chunk-UR5EWWWL.cjs.map} +1 -1
  202. package/dist/{chunk-6J326CN6.js → chunk-USEA7DB5.js} +4 -4
  203. package/dist/{chunk-6J326CN6.js.map → chunk-USEA7DB5.js.map} +1 -1
  204. package/dist/{chunk-DZZEJY3J.js → chunk-UUVI3TYW.js} +120 -148
  205. package/dist/chunk-UUVI3TYW.js.map +1 -0
  206. package/dist/{chunk-DV4K35UC.cjs → chunk-UW3KCCBT.cjs} +4 -4
  207. package/dist/{chunk-DV4K35UC.cjs.map → chunk-UW3KCCBT.cjs.map} +1 -1
  208. package/dist/{chunk-MEXR5ONE.js → chunk-V5XVXQWE.js} +5 -5
  209. package/dist/{chunk-MEXR5ONE.js.map → chunk-V5XVXQWE.js.map} +1 -1
  210. package/dist/{chunk-UXQSSRBQ.cjs → chunk-VCM4MR7N.cjs} +1785 -581
  211. package/dist/chunk-VCM4MR7N.cjs.map +1 -0
  212. package/dist/{chunk-VD52FLHL.js → chunk-VEQ5H765.js} +10 -10
  213. package/dist/{chunk-VD52FLHL.js.map → chunk-VEQ5H765.js.map} +1 -1
  214. package/dist/{chunk-Q4HAXT5C.cjs → chunk-VK7DXUGH.cjs} +31 -11
  215. package/dist/chunk-VK7DXUGH.cjs.map +1 -0
  216. package/dist/chunk-VPWNRWNO.cjs +81 -0
  217. package/dist/chunk-VPWNRWNO.cjs.map +1 -0
  218. package/dist/{chunk-VV72PGKH.cjs → chunk-VULMEKZZ.cjs} +27 -27
  219. package/dist/chunk-VULMEKZZ.cjs.map +1 -0
  220. package/dist/{chunk-MEUELWGO.cjs → chunk-VWG54F6X.cjs} +8 -8
  221. package/dist/{chunk-MEUELWGO.cjs.map → chunk-VWG54F6X.cjs.map} +1 -1
  222. package/dist/{chunk-MGJLBHPJ.js → chunk-WG4NNC3P.js} +4 -4
  223. package/dist/{chunk-MGJLBHPJ.js.map → chunk-WG4NNC3P.js.map} +1 -1
  224. package/dist/{chunk-V4ZH2H2P.cjs → chunk-WIFMXZIN.cjs} +14 -14
  225. package/dist/{chunk-V4ZH2H2P.cjs.map → chunk-WIFMXZIN.cjs.map} +1 -1
  226. package/dist/{chunk-5XMWGK3O.cjs → chunk-WOVSJHY6.cjs} +25 -36
  227. package/dist/chunk-WOVSJHY6.cjs.map +1 -0
  228. package/dist/{chunk-2VAUVJVG.js → chunk-X2P5SPGB.js} +3 -3
  229. package/dist/{chunk-2VAUVJVG.js.map → chunk-X2P5SPGB.js.map} +1 -1
  230. package/dist/{chunk-PBQMHXVO.js → chunk-XUCLNECV.js} +3 -3
  231. package/dist/{chunk-PBQMHXVO.js.map → chunk-XUCLNECV.js.map} +1 -1
  232. package/dist/{chunk-HXIU3SIQ.cjs → chunk-Y2GYPMLW.cjs} +5 -5
  233. package/dist/{chunk-HXIU3SIQ.cjs.map → chunk-Y2GYPMLW.cjs.map} +1 -1
  234. package/dist/{chunk-OTQAREYU.js → chunk-YAQB3UMC.js} +4 -4
  235. package/dist/{chunk-OTQAREYU.js.map → chunk-YAQB3UMC.js.map} +1 -1
  236. package/dist/{chunk-2VL66QBX.js → chunk-YGESCFX2.js} +3 -3
  237. package/dist/{chunk-2VL66QBX.js.map → chunk-YGESCFX2.js.map} +1 -1
  238. package/dist/{chunk-XPGIWOJO.cjs → chunk-YOAFVMEN.cjs} +18 -18
  239. package/dist/chunk-YOAFVMEN.cjs.map +1 -0
  240. package/dist/{chunk-2GMDMZKI.cjs → chunk-YQIDUJW2.cjs} +5 -5
  241. package/dist/{chunk-2GMDMZKI.cjs.map → chunk-YQIDUJW2.cjs.map} +1 -1
  242. package/dist/{chunk-R4DGCQTA.cjs → chunk-YQVWDHP4.cjs} +7 -7
  243. package/dist/{chunk-R4DGCQTA.cjs.map → chunk-YQVWDHP4.cjs.map} +1 -1
  244. package/dist/{chunk-LKGHYNLH.js → chunk-YRJYWTVG.js} +10 -10
  245. package/dist/chunk-YRJYWTVG.js.map +1 -0
  246. package/dist/{chunk-TKTCN4JE.cjs → chunk-ZNAGK36T.cjs} +9 -9
  247. package/dist/{chunk-TKTCN4JE.cjs.map → chunk-ZNAGK36T.cjs.map} +1 -1
  248. package/dist/{chunk-BSPWX2OZ.cjs → chunk-ZW2ZOEYM.cjs} +21 -15
  249. package/dist/chunk-ZW2ZOEYM.cjs.map +1 -0
  250. package/dist/components/Alert/index.cjs +10 -8
  251. package/dist/components/Alert/index.js +9 -7
  252. package/dist/components/AlertDialog/index.cjs +12 -10
  253. package/dist/components/AlertDialog/index.js +10 -8
  254. package/dist/components/AppShell/index.cjs +18 -15
  255. package/dist/components/AppShell/index.js +15 -12
  256. package/dist/components/AutocompleteInput/index.cjs +17 -14
  257. package/dist/components/AutocompleteInput/index.js +13 -10
  258. package/dist/components/Badge/Badge.d.ts.map +1 -1
  259. package/dist/components/Badge/Badge.recipe.d.ts +75 -41
  260. package/dist/components/Badge/Badge.recipe.d.ts.map +1 -1
  261. package/dist/components/Badge/index.cjs +3 -2
  262. package/dist/components/Badge/index.js +2 -1
  263. package/dist/components/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  264. package/dist/components/Breadcrumbs/index.cjs +5 -10
  265. package/dist/components/Breadcrumbs/index.js +2 -7
  266. package/dist/components/Button/Button.d.ts +5 -3
  267. package/dist/components/Button/Button.d.ts.map +1 -1
  268. package/dist/components/Button/index.cjs +9 -7
  269. package/dist/components/Button/index.js +8 -6
  270. package/dist/components/Calendar/index.cjs +10 -8
  271. package/dist/components/Calendar/index.js +9 -7
  272. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +83 -0
  273. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts.map +1 -0
  274. package/dist/components/CheckboxGroup/CheckboxGroup.recipe.d.ts +17 -0
  275. package/dist/components/CheckboxGroup/CheckboxGroup.recipe.d.ts.map +1 -0
  276. package/dist/components/CheckboxGroup/CheckboxGroupContext.d.ts +13 -0
  277. package/dist/components/CheckboxGroup/CheckboxGroupContext.d.ts.map +1 -0
  278. package/dist/components/CheckboxGroup/CheckboxGroupItem.d.ts +58 -0
  279. package/dist/components/CheckboxGroup/CheckboxGroupItem.d.ts.map +1 -0
  280. package/dist/components/CheckboxGroup/index.cjs +35 -0
  281. package/dist/components/CheckboxGroup/index.cjs.map +1 -0
  282. package/dist/components/CheckboxGroup/index.d.ts +4 -0
  283. package/dist/components/CheckboxGroup/index.d.ts.map +1 -0
  284. package/dist/components/CheckboxGroup/index.js +22 -0
  285. package/dist/components/CheckboxGroup/index.js.map +1 -0
  286. package/dist/components/CheckboxInput/CheckboxInput.d.ts +11 -2
  287. package/dist/components/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  288. package/dist/components/CheckboxInput/CheckboxInput.recipe.d.ts +6 -0
  289. package/dist/components/CheckboxInput/CheckboxInput.recipe.d.ts.map +1 -1
  290. package/dist/components/CheckboxInput/index.cjs +9 -8
  291. package/dist/components/CheckboxInput/index.js +8 -7
  292. package/dist/components/CodeBlock/index.cjs +10 -8
  293. package/dist/components/CodeBlock/index.js +9 -7
  294. package/dist/components/ContextMenu/index.cjs +14 -12
  295. package/dist/components/ContextMenu/index.js +12 -10
  296. package/dist/components/DateInput/index.cjs +13 -11
  297. package/dist/components/DateInput/index.js +12 -10
  298. package/dist/components/DateRangeInput/index.cjs +13 -11
  299. package/dist/components/DateRangeInput/index.js +12 -10
  300. package/dist/components/DateTimeInput/index.cjs +15 -13
  301. package/dist/components/DateTimeInput/index.js +14 -12
  302. package/dist/components/DropdownMenu/index.cjs +15 -13
  303. package/dist/components/DropdownMenu/index.js +11 -9
  304. package/dist/components/EmptyState/index.cjs +5 -5
  305. package/dist/components/EmptyState/index.js +4 -4
  306. package/dist/components/Field/index.cjs +6 -6
  307. package/dist/components/Field/index.js +4 -4
  308. package/dist/components/FileInput/index.cjs +11 -9
  309. package/dist/components/FileInput/index.js +10 -8
  310. package/dist/components/HoverCard/HoverCard.d.ts +6 -6
  311. package/dist/components/HoverCard/HoverCard.d.ts.map +1 -1
  312. package/dist/components/HoverCard/index.cjs +4 -4
  313. package/dist/components/HoverCard/index.js +2 -2
  314. package/dist/components/InputGroup/index.cjs +9 -9
  315. package/dist/components/InputGroup/index.js +5 -5
  316. package/dist/components/Item/Item.d.ts.map +1 -1
  317. package/dist/components/Item/index.cjs +7 -8
  318. package/dist/components/Item/index.js +6 -7
  319. package/dist/components/Layout/Layout.recipe.d.ts +17 -0
  320. package/dist/components/Layout/Layout.recipe.d.ts.map +1 -1
  321. package/dist/components/Layout/LayoutHeader.d.ts +12 -1
  322. package/dist/components/Layout/LayoutHeader.d.ts.map +1 -1
  323. package/dist/components/Layout/index.cjs +14 -12
  324. package/dist/components/Layout/index.js +9 -7
  325. package/dist/components/Lightbox/index.cjs +11 -9
  326. package/dist/components/Lightbox/index.js +9 -7
  327. package/dist/components/Link/Link.d.ts +4 -5
  328. package/dist/components/Link/Link.d.ts.map +1 -1
  329. package/dist/components/Link/Link.recipe.d.ts.map +1 -1
  330. package/dist/components/Link/index.cjs +9 -6
  331. package/dist/components/Link/index.js +6 -3
  332. package/dist/components/List/index.cjs +9 -10
  333. package/dist/components/List/index.js +7 -8
  334. package/dist/components/MetadataList/MetadataList.recipe.d.ts +9 -1
  335. package/dist/components/MetadataList/MetadataList.recipe.d.ts.map +1 -1
  336. package/dist/components/MetadataList/MetadataListItem.d.ts +6 -1
  337. package/dist/components/MetadataList/MetadataListItem.d.ts.map +1 -1
  338. package/dist/components/MetadataList/index.cjs +9 -6
  339. package/dist/components/MetadataList/index.js +7 -4
  340. package/dist/components/MultiSelect/index.cjs +14 -12
  341. package/dist/components/MultiSelect/index.js +13 -11
  342. package/dist/components/NumberInput/index.cjs +12 -10
  343. package/dist/components/NumberInput/index.js +11 -9
  344. package/dist/components/Pagination/index.cjs +10 -8
  345. package/dist/components/Pagination/index.js +9 -7
  346. package/dist/components/PasswordInput/index.cjs +13 -11
  347. package/dist/components/PasswordInput/index.js +12 -10
  348. package/dist/components/Popover/Popover.d.ts +13 -1
  349. package/dist/components/Popover/Popover.d.ts.map +1 -1
  350. package/dist/components/Popover/index.cjs +11 -9
  351. package/dist/components/Popover/index.js +9 -7
  352. package/dist/components/RadioGroup/index.cjs +10 -9
  353. package/dist/components/RadioGroup/index.js +8 -7
  354. package/dist/components/Schedule/CalendarEvent.d.ts +18 -4
  355. package/dist/components/Schedule/CalendarEvent.d.ts.map +1 -1
  356. package/dist/components/Schedule/DayView.d.ts +7 -1
  357. package/dist/components/Schedule/DayView.d.ts.map +1 -1
  358. package/dist/components/Schedule/ListView.d.ts.map +1 -1
  359. package/dist/components/Schedule/ListView.recipe.d.ts +56 -0
  360. package/dist/components/Schedule/ListView.recipe.d.ts.map +1 -0
  361. package/dist/components/Schedule/MonthlyView.d.ts.map +1 -1
  362. package/dist/components/Schedule/MonthlyView.recipe.d.ts +47 -0
  363. package/dist/components/Schedule/MonthlyView.recipe.d.ts.map +1 -0
  364. package/dist/components/Schedule/ScheduleEvent.recipe.d.ts +17 -0
  365. package/dist/components/Schedule/ScheduleEvent.recipe.d.ts.map +1 -1
  366. package/dist/components/Schedule/TimeGridView.d.ts +7 -1
  367. package/dist/components/Schedule/TimeGridView.d.ts.map +1 -1
  368. package/dist/components/Schedule/TimeGridView.recipe.d.ts +43 -0
  369. package/dist/components/Schedule/TimeGridView.recipe.d.ts.map +1 -0
  370. package/dist/components/Schedule/WeeklyView.d.ts +7 -1
  371. package/dist/components/Schedule/WeeklyView.d.ts.map +1 -1
  372. package/dist/components/Schedule/index.cjs +44 -21
  373. package/dist/components/Schedule/index.d.ts +6 -2
  374. package/dist/components/Schedule/index.d.ts.map +1 -1
  375. package/dist/components/Schedule/index.js +17 -10
  376. package/dist/components/Schedule/plugins/EventMovePlugin.d.ts +23 -0
  377. package/dist/components/Schedule/plugins/EventMovePlugin.d.ts.map +1 -0
  378. package/dist/components/Schedule/plugins/EventPopoverPlugin.d.ts +31 -0
  379. package/dist/components/Schedule/plugins/EventPopoverPlugin.d.ts.map +1 -0
  380. package/dist/components/Schedule/plugins/EventResizePlugin.d.ts +24 -0
  381. package/dist/components/Schedule/plugins/EventResizePlugin.d.ts.map +1 -0
  382. package/dist/components/Schedule/plugins/ScheduleEventPopoverContent.d.ts +39 -0
  383. package/dist/components/Schedule/plugins/ScheduleEventPopoverContent.d.ts.map +1 -0
  384. package/dist/components/Schedule/plugins/index.d.ts +4 -0
  385. package/dist/components/Schedule/plugins/index.d.ts.map +1 -1
  386. package/dist/components/Schedule/shared.d.ts +58 -3
  387. package/dist/components/Schedule/shared.d.ts.map +1 -1
  388. package/dist/components/Schedule/types.d.ts +47 -1
  389. package/dist/components/Schedule/types.d.ts.map +1 -1
  390. package/dist/components/SearchFilterInput/SearchFilterInputEditPopover.d.ts.map +1 -1
  391. package/dist/components/SearchFilterInput/SearchFilterInputEditPopover.recipe.d.ts +4 -0
  392. package/dist/components/SearchFilterInput/SearchFilterInputEditPopover.recipe.d.ts.map +1 -0
  393. package/dist/components/SearchFilterInput/index.cjs +32 -29
  394. package/dist/components/SearchFilterInput/index.js +24 -21
  395. package/dist/components/Select/index.cjs +15 -13
  396. package/dist/components/Select/index.js +13 -11
  397. package/dist/components/SideNav/SideNav.d.ts.map +1 -1
  398. package/dist/components/SideNav/SideNav.recipe.d.ts +26 -7
  399. package/dist/components/SideNav/SideNav.recipe.d.ts.map +1 -1
  400. package/dist/components/SideNav/SideNavItem.d.ts.map +1 -1
  401. package/dist/components/SideNav/index.cjs +18 -15
  402. package/dist/components/SideNav/index.js +12 -9
  403. package/dist/components/Slider/index.cjs +6 -6
  404. package/dist/components/Slider/index.js +5 -5
  405. package/dist/components/Spinner/index.cjs +5 -5
  406. package/dist/components/Spinner/index.js +4 -4
  407. package/dist/components/SplitButton/index.cjs +13 -11
  408. package/dist/components/SplitButton/index.js +12 -10
  409. package/dist/components/Stepper/index.cjs +5 -5
  410. package/dist/components/Stepper/index.js +4 -4
  411. package/dist/components/Switch/index.cjs +6 -6
  412. package/dist/components/Switch/index.js +5 -5
  413. package/dist/components/Table/index.cjs +55 -52
  414. package/dist/components/Table/index.js +29 -26
  415. package/dist/components/Tabs/Tab.d.ts.map +1 -1
  416. package/dist/components/Tabs/index.cjs +15 -13
  417. package/dist/components/Tabs/index.js +10 -8
  418. package/dist/components/Tag/Tag.d.ts.map +1 -1
  419. package/dist/components/Tag/index.cjs +8 -5
  420. package/dist/components/Tag/index.js +7 -4
  421. package/dist/components/TagsInput/index.cjs +15 -12
  422. package/dist/components/TagsInput/index.js +14 -11
  423. package/dist/components/Text/Heading.d.ts +5 -5
  424. package/dist/components/Text/Heading.d.ts.map +1 -1
  425. package/dist/components/Text/Text.d.ts +5 -5
  426. package/dist/components/Text/Text.d.ts.map +1 -1
  427. package/dist/components/Text/index.cjs +5 -5
  428. package/dist/components/Text/index.js +3 -3
  429. package/dist/components/TextArea/index.cjs +7 -7
  430. package/dist/components/TextArea/index.js +6 -6
  431. package/dist/components/TextInput/index.cjs +12 -10
  432. package/dist/components/TextInput/index.js +11 -9
  433. package/dist/components/Thumbnail/index.cjs +10 -8
  434. package/dist/components/Thumbnail/index.js +9 -7
  435. package/dist/components/TimeInput/index.cjs +11 -9
  436. package/dist/components/TimeInput/index.js +10 -8
  437. package/dist/components/Toast/ToastViewport.d.ts.map +1 -1
  438. package/dist/components/Toast/index.cjs +12 -10
  439. package/dist/components/Toast/index.js +9 -7
  440. package/dist/components/ToggleButton/ToggleButton.recipe.d.ts.map +1 -1
  441. package/dist/components/ToggleButton/index.cjs +7 -7
  442. package/dist/components/ToggleButton/index.js +5 -5
  443. package/dist/components/Tooltip/Tooltip.d.ts +6 -6
  444. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  445. package/dist/components/Tooltip/index.cjs +4 -4
  446. package/dist/components/Tooltip/index.js +2 -2
  447. package/dist/components/TopNav/TopNavItem.d.ts.map +1 -1
  448. package/dist/components/TopNav/index.cjs +16 -13
  449. package/dist/components/TopNav/index.js +11 -8
  450. package/dist/components/TreeView/TreeViewItem.d.ts.map +1 -1
  451. package/dist/components/TreeView/index.cjs +3 -2
  452. package/dist/components/TreeView/index.js +2 -1
  453. package/dist/index.cjs +260 -232
  454. package/dist/index.cjs.map +1 -1
  455. package/dist/index.d.ts +2 -1
  456. package/dist/index.d.ts.map +1 -1
  457. package/dist/index.js +62 -58
  458. package/dist/index.js.map +1 -1
  459. package/dist/internal/ActionElement.d.ts +45 -0
  460. package/dist/internal/ActionElement.d.ts.map +1 -0
  461. package/dist/internal/HoverLayerTrigger.d.ts +3 -4
  462. package/dist/internal/HoverLayerTrigger.d.ts.map +1 -1
  463. package/dist/internal/useLayer.d.ts +12 -0
  464. package/dist/internal/useLayer.d.ts.map +1 -1
  465. package/dist/internal/useSelectListbox.d.ts +5 -5
  466. package/dist/internal/useSelectListbox.d.ts.map +1 -1
  467. package/dist/styles.css +1 -1
  468. package/package.json +1 -1
  469. package/dist/chunk-2AWSJF22.js.map +0 -1
  470. package/dist/chunk-2RZNX26F.cjs.map +0 -1
  471. package/dist/chunk-3VJIUZAY.cjs.map +0 -1
  472. package/dist/chunk-3Z5PF75J.cjs.map +0 -1
  473. package/dist/chunk-4RDA4W4N.js.map +0 -1
  474. package/dist/chunk-5XMWGK3O.cjs.map +0 -1
  475. package/dist/chunk-65MJZYO6.js.map +0 -1
  476. package/dist/chunk-6EYLEVC6.js.map +0 -1
  477. package/dist/chunk-6PIVWNUR.js.map +0 -1
  478. package/dist/chunk-AEYJ6PWC.js.map +0 -1
  479. package/dist/chunk-BIJ6YDWJ.cjs.map +0 -1
  480. package/dist/chunk-BSPWX2OZ.cjs.map +0 -1
  481. package/dist/chunk-D5OX6II7.cjs.map +0 -1
  482. package/dist/chunk-DZZEJY3J.js.map +0 -1
  483. package/dist/chunk-EBJPUXFQ.js.map +0 -1
  484. package/dist/chunk-EFBSEJBD.js.map +0 -1
  485. package/dist/chunk-F7BFO3SD.cjs.map +0 -1
  486. package/dist/chunk-FCUUGJTM.cjs.map +0 -1
  487. package/dist/chunk-GSTINE4X.js.map +0 -1
  488. package/dist/chunk-GW6P4FJ4.cjs.map +0 -1
  489. package/dist/chunk-H2EMKCWT.js +0 -78
  490. package/dist/chunk-H2EMKCWT.js.map +0 -1
  491. package/dist/chunk-H4L456EW.js.map +0 -1
  492. package/dist/chunk-HIH6MS5D.js.map +0 -1
  493. package/dist/chunk-HWP2UGOC.cjs.map +0 -1
  494. package/dist/chunk-J2YKUHQM.js.map +0 -1
  495. package/dist/chunk-JM4Q7ZQH.cjs.map +0 -1
  496. package/dist/chunk-JSAYTQTJ.cjs.map +0 -1
  497. package/dist/chunk-KC4EKXGF.js.map +0 -1
  498. package/dist/chunk-KUXFEAT4.cjs +0 -80
  499. package/dist/chunk-KUXFEAT4.cjs.map +0 -1
  500. package/dist/chunk-L5JS6P62.cjs.map +0 -1
  501. package/dist/chunk-L5PJCLV6.js.map +0 -1
  502. package/dist/chunk-LBGC6EC5.js.map +0 -1
  503. package/dist/chunk-LKGHYNLH.js.map +0 -1
  504. package/dist/chunk-OUZX7STE.cjs.map +0 -1
  505. package/dist/chunk-Q3HMGFGI.js.map +0 -1
  506. package/dist/chunk-Q4HAXT5C.cjs.map +0 -1
  507. package/dist/chunk-RJEZBOSH.js.map +0 -1
  508. package/dist/chunk-S5CMLG2E.js.map +0 -1
  509. package/dist/chunk-SUWRSJAN.cjs.map +0 -1
  510. package/dist/chunk-THTVYP5V.js.map +0 -1
  511. package/dist/chunk-TSKFGLGQ.cjs.map +0 -1
  512. package/dist/chunk-TTDNCN5G.cjs.map +0 -1
  513. package/dist/chunk-U5M4JZBX.js.map +0 -1
  514. package/dist/chunk-UXQSSRBQ.cjs.map +0 -1
  515. package/dist/chunk-VH3G4IUX.js.map +0 -1
  516. package/dist/chunk-VV72PGKH.cjs.map +0 -1
  517. package/dist/chunk-W5F7PYT2.js.map +0 -1
  518. package/dist/chunk-XPGIWOJO.cjs.map +0 -1
  519. package/dist/chunk-XZZI3JYK.cjs.map +0 -1
  520. package/dist/chunk-ZPJW3PP7.cjs.map +0 -1
@@ -1,20 +1,27 @@
1
- import { DropdownMenu, DropdownMenuItem } from './chunk-TH537HOM.js';
1
+ import { ToggleButtonGroup, ToggleButton } from './chunk-6SKIBUCY.js';
2
+ import { MetadataList, MetadataListItem } from './chunk-HEF53COU.js';
3
+ import { DropdownMenu, DropdownMenuItem } from './chunk-PQXPYN23.js';
2
4
  import { ButtonGroup } from './chunk-D3CHBU46.js';
3
5
  import { plainDateToInstant, plainDateFromInstant, plainDateIsEqual, plainDateFormat, DATE_FORMAT_WITH_WEEKDAY, DATE_FORMAT_MONTH_YEAR, plainDateIsBefore, plainDateIsAfter, plainDateDayOfWeek } from './chunk-5HPXUDX6.js';
4
6
  import { getBrowserTimezoneID, nowEpochMilliseconds } from './chunk-OX4ZMUF4.js';
5
- import { Popover } from './chunk-S5CMLG2E.js';
6
- import { Button } from './chunk-THTVYP5V.js';
7
- import { Spinner } from './chunk-2VAUVJVG.js';
8
- import { Heading, Text } from './chunk-RJEZBOSH.js';
9
- import { Tooltip } from './chunk-6PIVWNUR.js';
7
+ import { Layout, LayoutHeader, LayoutFooter, LayoutContent } from './chunk-NSWKBWPP.js';
8
+ import { Popover, usePopover } from './chunk-GTZQT6MK.js';
9
+ import { Link } from './chunk-S4WWBV4N.js';
10
+ import { Button } from './chunk-EBV3EX3J.js';
11
+ import { Spinner } from './chunk-X2P5SPGB.js';
12
+ import { Text, Heading } from './chunk-5GSRIOXE.js';
13
+ import { Tooltip } from './chunk-KWZMXX4F.js';
14
+ import { useLatest_default } from './chunk-KEPCKSDE.js';
15
+ import { isReactNode } from './chunk-2PSZAWLC.js';
10
16
  import { Icon } from './chunk-IUW777WZ.js';
11
17
  import { sva } from './chunk-IAVZKGZS.js';
18
+ import { cva } from './chunk-FMEIPGUP.js';
12
19
  import { css } from './chunk-OD4DHHZH.js';
13
20
  import { cx } from './chunk-PPNETWIP.js';
14
21
  import { Temporal } from '@js-temporal/polyfill';
15
- import { createContext, use, useMemo, useState, Suspense, useSyncExternalStore, useCallback } from 'react';
22
+ import { createContext, use, useRef, useCallback, useMemo, useState, Suspense, useSyncExternalStore, Fragment as Fragment$1 } from 'react';
16
23
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
17
- import { ChevronLeft, ChevronRight, Check } from 'lucide-react';
24
+ import { Pencil, Trash2, X, CalendarDays, MapPin, AlignLeft, Tag, ChevronLeft, ChevronRight, Check } from 'lucide-react';
18
25
 
19
26
  var DATE_ONLY_RE = /^\d{4}-\d{2}-\d{2}$/;
20
27
  function createEventFromISO({
@@ -60,6 +67,22 @@ var scheduleEventRecipe = sva({
60
67
  color: "var(--schedule-event-fg)",
61
68
  _hover: {
62
69
  bg: "var(--schedule-event-bg-hover)"
70
+ },
71
+ // Active state: the pill's popover is open. Interactive pills carry
72
+ // `aria-expanded`, so this only matches the open trigger. The outline uses
73
+ // the category accent color and composes cleanly with the color/past
74
+ // background overrides.
75
+ '&[aria-expanded="true"]': {
76
+ outlineWidth: "focus",
77
+ outlineStyle: "solid",
78
+ outlineColor: "var(--schedule-event-dot)",
79
+ outlineOffset: "1px"
80
+ },
81
+ '&[data-state="past"]': {
82
+ "--schedule-event-bg": "color-mix(in srgb, var(--schedule-event-dot) 10%, token(colors.bg))",
83
+ "--schedule-event-bg-hover": "color-mix(in srgb, var(--schedule-event-dot) 14%, token(colors.bg))",
84
+ "--schedule-event-border": "color-mix(in srgb, var(--schedule-event-dot) 48%, token(colors.border))",
85
+ "--schedule-event-fg": "color-mix(in srgb, var(--schedule-event-fg-base) 52%, token(colors.fg.muted))"
63
86
  }
64
87
  },
65
88
  dot: {
@@ -115,6 +138,26 @@ var scheduleEventRecipe = sva({
115
138
  true: { event: { w: "full" } },
116
139
  false: {}
117
140
  },
141
+ // Applied when the pill is rendered as a clickable <button> trigger (event
142
+ // popover plugin). Resets user-agent button styling so the pill looks
143
+ // identical to its static <span> form.
144
+ isInteractive: {
145
+ true: {
146
+ event: {
147
+ appearance: "none",
148
+ textAlign: "inherit",
149
+ font: "inherit",
150
+ m: 0,
151
+ cursor: "pointer",
152
+ _focusVisible: {
153
+ outlineWidth: "focus",
154
+ outlineStyle: "solid",
155
+ outlineColor: "primary"
156
+ }
157
+ }
158
+ },
159
+ false: {}
160
+ },
118
161
  color: {
119
162
  blue: {
120
163
  event: {
@@ -230,6 +273,9 @@ var scheduleEventRecipe = sva({
230
273
  isPast: {
231
274
  true: {
232
275
  event: {
276
+ // Keep `isPast` in the recipe API for class-based assertions and
277
+ // callers, but rely on `[data-state="past"]` for the actual variable
278
+ // overrides so the color variant cannot win by atomic CSS order.
233
279
  "--schedule-event-bg": "color-mix(in srgb, var(--schedule-event-dot) 10%, token(colors.bg))",
234
280
  "--schedule-event-bg-hover": "color-mix(in srgb, var(--schedule-event-dot) 14%, token(colors.bg))",
235
281
  "--schedule-event-border": "color-mix(in srgb, var(--schedule-event-dot) 48%, token(colors.border))",
@@ -243,9 +289,208 @@ var scheduleEventRecipe = sva({
243
289
  layout: "inline",
244
290
  color: "blue",
245
291
  isFullWidth: false,
292
+ isInteractive: false,
246
293
  isPast: false
247
294
  }
248
295
  });
296
+
297
+ // src/components/Schedule/TimeGridView.recipe.ts
298
+ var scheduleTimeGridViewRecipe = sva({
299
+ slots: [
300
+ "grid",
301
+ "header",
302
+ "corner",
303
+ "dayHeader",
304
+ "dayHeaderContent",
305
+ "dayHeaderDayNumber",
306
+ "allDayLabel",
307
+ "allDayRow",
308
+ "dayCell",
309
+ "timeLabel",
310
+ "timeRow",
311
+ "hourCell",
312
+ "events",
313
+ "allDayEvents",
314
+ "allDayPopoverContent",
315
+ "allDayPopoverEvents",
316
+ "allDaySeeMoreButton",
317
+ "rowContents"
318
+ ],
319
+ base: {
320
+ grid: {
321
+ display: "grid",
322
+ gridTemplateColumns: "72px 1fr",
323
+ overflow: "auto"
324
+ },
325
+ header: {
326
+ display: "grid",
327
+ gridTemplateColumns: "repeat(var(--schedule-day-count), minmax(160px, 1fr))",
328
+ borderBlockEndWidth: "default",
329
+ borderBlockEndStyle: "solid",
330
+ borderBlockEndColor: "border"
331
+ },
332
+ corner: {
333
+ borderInlineEndWidth: "default",
334
+ borderInlineEndStyle: "solid",
335
+ borderInlineEndColor: "border",
336
+ borderBlockEndWidth: "default",
337
+ borderBlockEndStyle: "solid",
338
+ borderBlockEndColor: "border"
339
+ },
340
+ dayHeader: {
341
+ p: "2",
342
+ textAlign: "center",
343
+ borderInlineEndWidth: "default",
344
+ borderInlineEndStyle: "solid",
345
+ borderInlineEndColor: "border"
346
+ },
347
+ dayHeaderContent: {
348
+ display: "inline-flex",
349
+ alignItems: "center",
350
+ justifyContent: "center",
351
+ gap: "1"
352
+ },
353
+ dayHeaderDayNumber: {
354
+ display: "inline-flex",
355
+ alignItems: "center",
356
+ justifyContent: "center",
357
+ minW: "30px",
358
+ h: "30px",
359
+ lineHeight: "30px",
360
+ borderRadius: "full"
361
+ },
362
+ allDayLabel: {
363
+ display: "flex",
364
+ alignItems: "flex-start",
365
+ justifyContent: "flex-end",
366
+ py: "0.5",
367
+ px: "2",
368
+ borderInlineEndWidth: "default",
369
+ borderInlineEndStyle: "solid",
370
+ borderInlineEndColor: "border",
371
+ borderBlockEndWidth: "default",
372
+ borderBlockEndStyle: "solid",
373
+ borderBlockEndColor: "border"
374
+ },
375
+ allDayRow: {
376
+ display: "grid",
377
+ gridTemplateColumns: "repeat(var(--schedule-day-count), minmax(160px, 1fr))",
378
+ borderBlockEndWidth: "default",
379
+ borderBlockEndStyle: "solid",
380
+ borderBlockEndColor: "border"
381
+ },
382
+ dayCell: {
383
+ minH: 0,
384
+ p: "0.5",
385
+ borderInlineEndWidth: "default",
386
+ borderInlineEndStyle: "solid",
387
+ borderInlineEndColor: "border"
388
+ },
389
+ timeLabel: {
390
+ p: "2",
391
+ color: "fg.muted",
392
+ textAlign: "end",
393
+ borderInlineEndWidth: "default",
394
+ borderInlineEndStyle: "solid",
395
+ borderInlineEndColor: "border",
396
+ borderBlockEndWidth: "default",
397
+ borderBlockEndStyle: "solid",
398
+ borderBlockEndColor: "border"
399
+ },
400
+ timeRow: {
401
+ display: "grid",
402
+ gridTemplateColumns: "repeat(var(--schedule-day-count), minmax(160px, 1fr))"
403
+ },
404
+ hourCell: {
405
+ position: "relative",
406
+ minH: "14",
407
+ p: "1",
408
+ borderInlineEndWidth: "default",
409
+ borderInlineEndStyle: "solid",
410
+ borderInlineEndColor: "border",
411
+ borderBlockEndWidth: "default",
412
+ borderBlockEndStyle: "solid",
413
+ borderBlockEndColor: "border"
414
+ },
415
+ events: {
416
+ display: "flex",
417
+ flexDirection: "column",
418
+ gap: "1"
419
+ },
420
+ allDayEvents: {
421
+ display: "flex",
422
+ flexDirection: "column",
423
+ gap: "0.5"
424
+ },
425
+ allDayPopoverContent: {
426
+ display: "flex",
427
+ flexDirection: "column",
428
+ gap: "1",
429
+ p: "3"
430
+ },
431
+ allDayPopoverEvents: {
432
+ display: "flex",
433
+ flexDirection: "column",
434
+ gap: 0,
435
+ m: 0,
436
+ p: 0,
437
+ listStyleType: "none"
438
+ },
439
+ allDaySeeMoreButton: {
440
+ display: "inline-flex",
441
+ alignItems: "center",
442
+ maxW: "full",
443
+ h: "5",
444
+ px: "1",
445
+ borderRadius: "sm",
446
+ color: "primary",
447
+ cursor: "pointer",
448
+ fontSize: "xs",
449
+ fontWeight: "medium",
450
+ lineHeight: "tight",
451
+ overflow: "hidden",
452
+ textOverflow: "ellipsis",
453
+ whiteSpace: "nowrap",
454
+ _hover: {
455
+ bg: "bg.muted"
456
+ }
457
+ },
458
+ rowContents: {
459
+ display: "contents"
460
+ }
461
+ },
462
+ variants: {
463
+ isCurrentDay: {
464
+ true: {
465
+ dayHeaderDayNumber: {
466
+ bg: "primary",
467
+ color: "fg.onPrimary"
468
+ }
469
+ },
470
+ false: {}
471
+ },
472
+ isLastColumn: {
473
+ true: {
474
+ dayHeader: { borderInlineEndWidth: 0 },
475
+ dayCell: { borderInlineEndWidth: 0 },
476
+ hourCell: { borderInlineEndWidth: 0 }
477
+ },
478
+ false: {}
479
+ },
480
+ isLastRow: {
481
+ true: {
482
+ timeLabel: { borderBlockEndWidth: 0 },
483
+ hourCell: { borderBlockEndWidth: 0 }
484
+ },
485
+ false: {}
486
+ }
487
+ },
488
+ defaultVariants: {
489
+ isCurrentDay: false,
490
+ isLastColumn: false,
491
+ isLastRow: false
492
+ }
493
+ });
249
494
  var ScheduleContext = createContext(null);
250
495
  ScheduleContext.displayName = "ScheduleContext";
251
496
  function useScheduleContext() {
@@ -382,6 +627,53 @@ var scheduleRecipe = sva({
382
627
  });
383
628
  var scheduleClasses = scheduleRecipe();
384
629
  var categoryFallback = { label: "Event", color: "blue" };
630
+ var currentTimeIndicator = cva({
631
+ base: {
632
+ h: "0.5",
633
+ bg: "surface.orange.accent",
634
+ borderRadius: "full",
635
+ pointerEvents: "none",
636
+ _before: {
637
+ content: '""',
638
+ position: "absolute",
639
+ insetInlineStart: "-6px",
640
+ top: "50%",
641
+ w: "2.5",
642
+ h: "2.5",
643
+ borderRadius: "full",
644
+ bg: "surface.orange.accent",
645
+ transform: "translateY(-50%)"
646
+ }
647
+ },
648
+ variants: {
649
+ layout: {
650
+ list: {
651
+ position: "relative"
652
+ },
653
+ timeGrid: {
654
+ position: "absolute",
655
+ insetInline: "0",
656
+ transform: "translateY(2px)",
657
+ zIndex: "20"
658
+ }
659
+ }
660
+ }
661
+ });
662
+ function ScheduleCurrentTimeIndicator({
663
+ layout,
664
+ testId,
665
+ style
666
+ }) {
667
+ return /* @__PURE__ */ jsx(
668
+ "div",
669
+ {
670
+ "aria-hidden": "true",
671
+ className: currentTimeIndicator({ layout }),
672
+ "data-testid": testId,
673
+ style
674
+ }
675
+ );
676
+ }
385
677
  function createCategoryMap(categories) {
386
678
  const categoryMap = /* @__PURE__ */ new Map();
387
679
  categories.forEach((category) => {
@@ -458,45 +750,197 @@ function isEventInPast(event, currentTime2, timezoneID) {
458
750
  }
459
751
  return event.end <= currentTime2;
460
752
  }
461
- function CalendarEventPill({
753
+ function hasEventPopoverPlugin(plugins) {
754
+ return plugins.some((plugin) => plugin.renderEventPopover != null);
755
+ }
756
+ function useScheduleEventPopover(event, { placement = "end" } = {}) {
757
+ const { categoryMap, plugins, timezoneID } = useScheduleContext();
758
+ const popover = usePopover({
759
+ // Content renders its own close affordance via the `controls.close` passed
760
+ // to renderEventPopover, so suppress the built-in close button.
761
+ hasCloseButton: false,
762
+ label: getEventAccessibleLabel(event, categoryMap, timezoneID),
763
+ role: "dialog"
764
+ });
765
+ const { hide } = popover;
766
+ const controls = useMemo(
767
+ () => ({ close: hide }),
768
+ [hide]
769
+ );
770
+ const content = useMemo(() => {
771
+ for (const plugin of plugins) {
772
+ const node = plugin.renderEventPopover?.(event, controls);
773
+ if (isReactNode(node)) {
774
+ return node;
775
+ }
776
+ }
777
+ return null;
778
+ }, [controls, event, plugins]);
779
+ if (!isReactNode(content)) {
780
+ return {};
781
+ }
782
+ return {
783
+ popover: popover.render(content, {
784
+ alignment: "start",
785
+ offsetX: 8,
786
+ offsetY: -3,
787
+ placement
788
+ }),
789
+ triggerProps: {
790
+ ...popover.triggerProps,
791
+ onClick: popover.toggle,
792
+ ref: popover.triggerRef
793
+ }
794
+ };
795
+ }
796
+ function useScheduleEventPluginProps({
462
797
  event,
463
- isPast = false
798
+ layout
464
799
  }) {
465
- const { categoryMap, timezoneID } = useScheduleContext();
466
- const category = getCategory(categoryMap, event);
467
- const classes = scheduleEventRecipe({ color: category.color, isPast });
800
+ const { plugins, timezoneID } = useScheduleContext();
801
+ return useMemo(() => {
802
+ let props;
803
+ plugins.forEach((plugin) => {
804
+ const pluginProps = plugin.getEventProps?.({ event, layout, timezoneID });
805
+ if (pluginProps != null) {
806
+ props = { ...props, ...pluginProps };
807
+ }
808
+ });
809
+ return props;
810
+ }, [event, layout, plugins, timezoneID]);
811
+ }
812
+ function EventPillRoot({
813
+ children,
814
+ className,
815
+ dataState,
816
+ dataTestId,
817
+ pluginProps,
818
+ triggerProps
819
+ }) {
820
+ if (triggerProps != null) {
821
+ return /* @__PURE__ */ jsx(
822
+ "button",
823
+ {
824
+ className,
825
+ "data-state": dataState,
826
+ "data-testid": dataTestId,
827
+ ...pluginProps,
828
+ type: "button",
829
+ ...triggerProps,
830
+ children
831
+ }
832
+ );
833
+ }
468
834
  return /* @__PURE__ */ jsx(
469
835
  "span",
470
836
  {
471
- className: classes.event,
472
- "data-state": isPast ? "past" : void 0,
473
- "data-testid": `schedule-event-${event.id}`,
474
- children: /* @__PURE__ */ jsx("span", { className: classes.title, children: isDayEvent(event) ? event.title : getEventAccessibleLabel(event, categoryMap, timezoneID) })
837
+ className,
838
+ "data-state": dataState,
839
+ "data-testid": dataTestId,
840
+ ...pluginProps,
841
+ children
475
842
  }
476
843
  );
477
844
  }
845
+ function CalendarEventPill({
846
+ event,
847
+ isFullWidth = false,
848
+ isPast = false
849
+ }) {
850
+ const { categoryMap, timezoneID } = useScheduleContext();
851
+ const { popover, triggerProps } = useScheduleEventPopover(event);
852
+ const pluginProps = useScheduleEventPluginProps({ event, layout: "inline" });
853
+ const category = getCategory(categoryMap, event);
854
+ const classes = scheduleEventRecipe({
855
+ color: category.color,
856
+ isFullWidth,
857
+ isPast,
858
+ isInteractive: triggerProps != null
859
+ });
860
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
861
+ /* @__PURE__ */ jsx(
862
+ EventPillRoot,
863
+ {
864
+ className: classes.event,
865
+ dataState: isPast ? "past" : void 0,
866
+ dataTestId: `schedule-event-${event.id}`,
867
+ pluginProps,
868
+ triggerProps,
869
+ children: /* @__PURE__ */ jsx("span", { className: classes.title, children: isDayEvent(event) ? event.title : getEventAccessibleLabel(event, categoryMap, timezoneID) })
870
+ }
871
+ ),
872
+ popover
873
+ ] });
874
+ }
478
875
  function CalendarMonthEventPill({
479
876
  event,
480
877
  isPast = false
481
878
  }) {
482
879
  const { categoryMap, timezoneID } = useScheduleContext();
880
+ const { popover, triggerProps } = useScheduleEventPopover(event);
881
+ const pluginProps = useScheduleEventPluginProps({ event, layout: "month" });
483
882
  const category = getCategory(categoryMap, event);
484
883
  const startTimeLabel = getEventStartTimeLabel(event, timezoneID);
485
884
  const classes = scheduleEventRecipe({
486
885
  color: category.color,
487
886
  isPast,
488
- isFullWidth: true
887
+ isFullWidth: true,
888
+ isInteractive: triggerProps != null
489
889
  });
490
- return /* @__PURE__ */ jsxs(
491
- "span",
890
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
891
+ /* @__PURE__ */ jsxs(
892
+ EventPillRoot,
893
+ {
894
+ className: classes.event,
895
+ dataState: isPast ? "past" : void 0,
896
+ dataTestId: `schedule-event-${event.id}`,
897
+ pluginProps,
898
+ triggerProps,
899
+ children: [
900
+ startTimeLabel != null ? /* @__PURE__ */ jsx("span", { className: classes.time, children: startTimeLabel }) : null,
901
+ /* @__PURE__ */ jsx("span", { className: classes.title, children: event.title })
902
+ ]
903
+ }
904
+ ),
905
+ popover
906
+ ] });
907
+ }
908
+ function ScheduleEventOverflowPopover({
909
+ buttonClassName,
910
+ contentClassName,
911
+ events,
912
+ eventsClassName,
913
+ hiddenEventCount,
914
+ label,
915
+ renderEvent,
916
+ testId,
917
+ title
918
+ }) {
919
+ return /* @__PURE__ */ jsx(
920
+ Popover,
492
921
  {
493
- className: classes.event,
494
- "data-state": isPast ? "past" : void 0,
495
- "data-testid": `schedule-event-${event.id}`,
496
- children: [
497
- startTimeLabel != null ? /* @__PURE__ */ jsx("span", { className: classes.time, children: startTimeLabel }) : null,
498
- /* @__PURE__ */ jsx("span", { className: classes.title, children: event.title })
499
- ]
922
+ content: /* @__PURE__ */ jsxs("div", { className: contentClassName, children: [
923
+ /* @__PURE__ */ jsx(Heading, { level: 4, children: title }),
924
+ /* @__PURE__ */ jsx("ul", { className: eventsClassName, children: events.map((event) => /* @__PURE__ */ jsx("li", { children: renderEvent(event) }, event.id)) })
925
+ ] }),
926
+ "data-testid": testId,
927
+ label,
928
+ width: 320,
929
+ children: /* @__PURE__ */ jsxs(
930
+ Link,
931
+ {
932
+ className: buttonClassName,
933
+ color: "primary",
934
+ label,
935
+ size: "xs",
936
+ weight: "medium",
937
+ children: [
938
+ "+",
939
+ hiddenEventCount,
940
+ " more"
941
+ ]
942
+ }
943
+ )
500
944
  }
501
945
  );
502
946
  }
@@ -570,141 +1014,7 @@ function subscribe(listener) {
570
1014
  function useCurrentTime() {
571
1015
  return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
572
1016
  }
573
- var styles = {
574
- grid: css({
575
- display: "grid",
576
- gridTemplateColumns: "72px 1fr",
577
- overflow: "auto"
578
- }),
579
- header: css({
580
- display: "grid",
581
- gridTemplateColumns: "repeat(var(--schedule-day-count), minmax(160px, 1fr))",
582
- borderBlockEndWidth: "default",
583
- borderBlockEndStyle: "solid",
584
- borderBlockEndColor: "border"
585
- }),
586
- corner: css({
587
- borderInlineEndWidth: "default",
588
- borderInlineEndStyle: "solid",
589
- borderInlineEndColor: "border",
590
- borderBlockEndWidth: "default",
591
- borderBlockEndStyle: "solid",
592
- borderBlockEndColor: "border"
593
- }),
594
- dayHeader: css({
595
- p: "2",
596
- textAlign: "center",
597
- borderInlineEndWidth: "default",
598
- borderInlineEndStyle: "solid",
599
- borderInlineEndColor: "border"
600
- }),
601
- lastColumn: css({
602
- borderInlineEndWidth: 0
603
- }),
604
- dayHeaderContent: css({
605
- display: "inline-flex",
606
- alignItems: "center",
607
- justifyContent: "center",
608
- gap: "1"
609
- }),
610
- dayHeaderDayNumber: css({
611
- display: "inline-flex",
612
- alignItems: "center",
613
- justifyContent: "center",
614
- minW: "30px",
615
- h: "30px",
616
- lineHeight: "30px",
617
- borderRadius: "full"
618
- }),
619
- dayHeaderCurrent: css({
620
- bg: "primary",
621
- color: "fg.onPrimary"
622
- }),
623
- allDayLabel: css({
624
- display: "flex",
625
- alignItems: "center",
626
- justifyContent: "flex-end",
627
- py: "1",
628
- px: "2",
629
- borderInlineEndWidth: "default",
630
- borderInlineEndStyle: "solid",
631
- borderInlineEndColor: "border",
632
- borderBlockEndWidth: "default",
633
- borderBlockEndStyle: "solid",
634
- borderBlockEndColor: "border"
635
- }),
636
- allDayRow: css({
637
- display: "grid",
638
- gridTemplateColumns: "repeat(var(--schedule-day-count), minmax(160px, 1fr))",
639
- borderBlockEndWidth: "default",
640
- borderBlockEndStyle: "solid",
641
- borderBlockEndColor: "border"
642
- }),
643
- dayCell: css({
644
- minH: 0,
645
- p: "0.5",
646
- borderInlineEndWidth: "default",
647
- borderInlineEndStyle: "solid",
648
- borderInlineEndColor: "border"
649
- }),
650
- timeLabel: css({
651
- p: "2",
652
- color: "fg.muted",
653
- textAlign: "end",
654
- borderInlineEndWidth: "default",
655
- borderInlineEndStyle: "solid",
656
- borderInlineEndColor: "border",
657
- borderBlockEndWidth: "default",
658
- borderBlockEndStyle: "solid",
659
- borderBlockEndColor: "border"
660
- }),
661
- timeRow: css({
662
- display: "grid",
663
- gridTemplateColumns: "repeat(var(--schedule-day-count), minmax(160px, 1fr))"
664
- }),
665
- hourCell: css({
666
- position: "relative",
667
- minH: "14",
668
- p: "1",
669
- borderInlineEndWidth: "default",
670
- borderInlineEndStyle: "solid",
671
- borderInlineEndColor: "border",
672
- borderBlockEndWidth: "default",
673
- borderBlockEndStyle: "solid",
674
- borderBlockEndColor: "border"
675
- }),
676
- lastRow: css({
677
- borderBlockEndWidth: 0
678
- }),
679
- events: css({
680
- display: "flex",
681
- flexDirection: "column",
682
- gap: "1"
683
- }),
684
- currentTimeLine: css({
685
- position: "absolute",
686
- insetInline: "0",
687
- borderBlockStartWidth: "2px",
688
- borderBlockStartStyle: "solid",
689
- borderBlockStartColor: "surface.orange.accent",
690
- transform: "translateY(2px)",
691
- zIndex: "20",
692
- pointerEvents: "none",
693
- _before: {
694
- content: '""',
695
- position: "absolute",
696
- insetInlineStart: "-6px",
697
- top: "-6px",
698
- w: "2.5",
699
- h: "2.5",
700
- borderRadius: "full",
701
- bg: "surface.orange.accent"
702
- }
703
- }),
704
- rowContents: css({
705
- display: "contents"
706
- })
707
- };
1017
+ var styles = scheduleTimeGridViewRecipe();
708
1018
  function eventOverlapsHour(event, day, hour, timezoneID) {
709
1019
  if (isDayEvent(event)) {
710
1020
  return false;
@@ -785,6 +1095,77 @@ function getTimedEventStyle({
785
1095
  zIndex: level + 1
786
1096
  };
787
1097
  }
1098
+ function TimeGridEvent({
1099
+ currentTime: currentTime2,
1100
+ hourHeight,
1101
+ layout,
1102
+ maxHour,
1103
+ minHour
1104
+ }) {
1105
+ const { categoryMap, plugins, timezoneID } = useScheduleContext();
1106
+ const { event } = layout;
1107
+ const { popover, triggerProps } = useScheduleEventPopover(event);
1108
+ const eventPluginProps = useScheduleEventPluginProps({
1109
+ event,
1110
+ layout: "timeGrid"
1111
+ });
1112
+ const pluginEndContent = useMemo(
1113
+ () => plugins.map((plugin, index) => {
1114
+ const content = plugin.renderTimeGridEventContent?.({
1115
+ event,
1116
+ hourHeight,
1117
+ maxHour,
1118
+ minHour,
1119
+ timezoneID
1120
+ });
1121
+ return isReactNode(content) ? (
1122
+ // eslint-disable-next-line @eslint-react/no-array-index-key -- stable plugin order
1123
+ /* @__PURE__ */ jsx(Fragment$1, { children: content }, index)
1124
+ ) : null;
1125
+ }),
1126
+ [event, hourHeight, maxHour, minHour, plugins, timezoneID]
1127
+ );
1128
+ const category = getCategory(categoryMap, event);
1129
+ const isPast = isEventInPast(event, currentTime2, timezoneID);
1130
+ const classes = scheduleEventRecipe({
1131
+ layout: "block",
1132
+ color: category.color,
1133
+ isPast,
1134
+ isInteractive: triggerProps != null
1135
+ });
1136
+ const style = getTimedEventStyle(layout);
1137
+ const body = /* @__PURE__ */ jsxs(Fragment, { children: [
1138
+ /* @__PURE__ */ jsx("span", { className: classes.title, children: event.title }),
1139
+ /* @__PURE__ */ jsx("span", { className: classes.time, children: getEventTimeLabel(event, timezoneID) }),
1140
+ pluginEndContent
1141
+ ] });
1142
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1143
+ triggerProps != null ? /* @__PURE__ */ jsx(
1144
+ "button",
1145
+ {
1146
+ className: classes.event,
1147
+ "data-state": isPast ? "past" : void 0,
1148
+ "data-testid": `schedule-event-${event.id}`,
1149
+ style,
1150
+ type: "button",
1151
+ ...eventPluginProps,
1152
+ ...triggerProps,
1153
+ children: body
1154
+ }
1155
+ ) : /* @__PURE__ */ jsx(
1156
+ "div",
1157
+ {
1158
+ className: classes.event,
1159
+ "data-state": isPast ? "past" : void 0,
1160
+ "data-testid": `schedule-event-${event.id}`,
1161
+ ...eventPluginProps,
1162
+ style,
1163
+ children: body
1164
+ }
1165
+ ),
1166
+ popover
1167
+ ] });
1168
+ }
788
1169
  function getCellName({
789
1170
  categoryMap,
790
1171
  date,
@@ -799,12 +1180,13 @@ function getCellName({
799
1180
  return eventLabels.length > 0 ? `${dateLabel} ${hourLabel}. ${eventLabels.join(". ")}` : `${dateLabel} ${hourLabel}`;
800
1181
  }
801
1182
  function TimeGridView({
1183
+ allDayEventLimit = 3,
802
1184
  days,
803
1185
  hourHeight = 100,
804
1186
  maxHour = 24,
805
1187
  minHour = 0
806
1188
  }) {
807
- const { categoryMap, events, highlightDate, timezoneID } = useScheduleContext();
1189
+ const { categoryMap, events, highlightDate, plugins, timezoneID } = useScheduleContext();
808
1190
  const normalizedMinHour = Math.max(0, Math.min(23, Math.floor(minHour)));
809
1191
  const normalizedMaxHour = Math.max(
810
1192
  normalizedMinHour + 1,
@@ -824,6 +1206,7 @@ function TimeGridView({
824
1206
  "--schedule-day-count": String(days.length)
825
1207
  };
826
1208
  const normalizedHourHeight = Math.max(1, Math.floor(hourHeight));
1209
+ const normalizedAllDayEventLimit = Number.isFinite(allDayEventLimit) ? Math.max(0, Math.floor(allDayEventLimit)) : 3;
827
1210
  const hourStyle = {
828
1211
  height: normalizedHourHeight,
829
1212
  minHeight: normalizedHourHeight
@@ -859,42 +1242,37 @@ function TimeGridView({
859
1242
  role: "columnheader"
860
1243
  }
861
1244
  ),
862
- /* @__PURE__ */ jsx("div", { className: styles.header, children: days.map((day, index) => /* @__PURE__ */ jsx(
863
- "div",
864
- {
865
- "aria-colindex": index + 2,
866
- "aria-current": plainDateIsEqual(day, highlightPlainDate) ? "date" : void 0,
867
- "aria-label": plainDateFormat(day, DATE_FORMAT_WITH_WEEKDAY),
868
- className: cx(
869
- styles.dayHeader,
870
- index === days.length - 1 && styles.lastColumn
871
- ),
872
- role: "columnheader",
873
- children: /* @__PURE__ */ jsx(
874
- Heading,
875
- {
876
- "aria-hidden": "true",
877
- color: "secondary",
878
- level: 4,
879
- textWrap: "nowrap",
880
- children: /* @__PURE__ */ jsxs("span", { className: styles.dayHeaderContent, children: [
881
- plainDateFormat(day, { weekday: "short" }),
882
- /* @__PURE__ */ jsx(
883
- "span",
884
- {
885
- className: cx(
886
- styles.dayHeaderDayNumber,
887
- plainDateIsEqual(day, highlightPlainDate) && styles.dayHeaderCurrent
888
- ),
889
- children: day.day
890
- }
891
- )
892
- ] })
893
- }
894
- )
895
- },
896
- day.toString()
897
- )) })
1245
+ /* @__PURE__ */ jsx("div", { className: styles.header, children: days.map((day, index) => {
1246
+ const isCurrentDay = plainDateIsEqual(day, highlightPlainDate);
1247
+ const dayHeaderClasses = scheduleTimeGridViewRecipe({
1248
+ isCurrentDay,
1249
+ isLastColumn: index === days.length - 1
1250
+ });
1251
+ return /* @__PURE__ */ jsx(
1252
+ "div",
1253
+ {
1254
+ "aria-colindex": index + 2,
1255
+ "aria-current": isCurrentDay ? "date" : void 0,
1256
+ "aria-label": plainDateFormat(day, DATE_FORMAT_WITH_WEEKDAY),
1257
+ className: dayHeaderClasses.dayHeader,
1258
+ role: "columnheader",
1259
+ children: /* @__PURE__ */ jsx(
1260
+ Heading,
1261
+ {
1262
+ "aria-hidden": "true",
1263
+ color: "secondary",
1264
+ level: 4,
1265
+ textWrap: "nowrap",
1266
+ children: /* @__PURE__ */ jsxs("span", { className: styles.dayHeaderContent, children: [
1267
+ plainDateFormat(day, { weekday: "short" }),
1268
+ /* @__PURE__ */ jsx("span", { className: dayHeaderClasses.dayHeaderDayNumber, children: day.day })
1269
+ ] })
1270
+ }
1271
+ )
1272
+ },
1273
+ day.toString()
1274
+ );
1275
+ }) })
898
1276
  ] }),
899
1277
  /* @__PURE__ */ jsxs("div", { className: styles.rowContents, role: "row", children: [
900
1278
  /* @__PURE__ */ jsx(
@@ -911,6 +1289,16 @@ function TimeGridView({
911
1289
  const dayEvents = events.filter(
912
1290
  (event) => isDayEvent(event) && eventOccursOnDate(event, day, timezoneID)
913
1291
  );
1292
+ const visibleDayEvents = dayEvents.slice(
1293
+ 0,
1294
+ normalizedAllDayEventLimit
1295
+ );
1296
+ const hiddenDayEvents = dayEvents.slice(normalizedAllDayEventLimit);
1297
+ const dayCellClasses = scheduleTimeGridViewRecipe({
1298
+ isLastColumn: index === days.length - 1
1299
+ });
1300
+ const dateLabel = plainDateFormat(day, DATE_FORMAT_WITH_WEEKDAY);
1301
+ const seeMoreLabel = `Show ${hiddenDayEvents.length} more all-day events for ${dateLabel}`;
914
1302
  return /* @__PURE__ */ jsx(
915
1303
  "div",
916
1304
  {
@@ -922,19 +1310,39 @@ function TimeGridView({
922
1310
  hourLabel: "all day",
923
1311
  timezoneID
924
1312
  }),
925
- className: cx(
926
- styles.dayCell,
927
- index === days.length - 1 && styles.lastColumn
928
- ),
1313
+ className: dayCellClasses.dayCell,
929
1314
  role: "gridcell",
930
- children: /* @__PURE__ */ jsx("div", { className: styles.events, children: dayEvents.map((event) => /* @__PURE__ */ jsx(
931
- CalendarEventPill,
932
- {
933
- event,
934
- isPast: isEventInPast(event, currentTime2, timezoneID)
935
- },
936
- event.id
937
- )) })
1315
+ children: /* @__PURE__ */ jsxs("div", { className: styles.allDayEvents, children: [
1316
+ visibleDayEvents.map((event) => /* @__PURE__ */ jsx(
1317
+ CalendarEventPill,
1318
+ {
1319
+ event,
1320
+ isPast: isEventInPast(event, currentTime2, timezoneID)
1321
+ },
1322
+ event.id
1323
+ )),
1324
+ hiddenDayEvents.length > 0 ? /* @__PURE__ */ jsx(
1325
+ ScheduleEventOverflowPopover,
1326
+ {
1327
+ buttonClassName: styles.allDaySeeMoreButton,
1328
+ contentClassName: styles.allDayPopoverContent,
1329
+ events: dayEvents,
1330
+ eventsClassName: styles.allDayPopoverEvents,
1331
+ hiddenEventCount: hiddenDayEvents.length,
1332
+ label: seeMoreLabel,
1333
+ renderEvent: (event) => /* @__PURE__ */ jsx(
1334
+ CalendarEventPill,
1335
+ {
1336
+ event,
1337
+ isFullWidth: true,
1338
+ isPast: isEventInPast(event, currentTime2, timezoneID)
1339
+ }
1340
+ ),
1341
+ testId: `schedule-all-day-see-more-${day.toString()}`,
1342
+ title: dateLabel
1343
+ }
1344
+ ) : null
1345
+ ] })
938
1346
  },
939
1347
  `${day.toString()}-all-day`
940
1348
  );
@@ -943,12 +1351,15 @@ function TimeGridView({
943
1351
  hours.map((hour) => {
944
1352
  const hourLabel = formatHour(hour);
945
1353
  const isLastHour = hour === hours[hours.length - 1];
1354
+ const timeLabelClasses = scheduleTimeGridViewRecipe({
1355
+ isLastRow: isLastHour
1356
+ });
946
1357
  return /* @__PURE__ */ jsxs("div", { className: styles.rowContents, role: "row", children: [
947
1358
  /* @__PURE__ */ jsx(
948
1359
  "div",
949
1360
  {
950
1361
  "aria-colindex": 1,
951
- className: cx(styles.timeLabel, isLastHour && styles.lastRow),
1362
+ className: timeLabelClasses.timeLabel,
952
1363
  role: "rowheader",
953
1364
  style: hourStyle,
954
1365
  children: hourLabel
@@ -967,6 +1378,24 @@ function TimeGridView({
967
1378
  minHour: normalizedMinHour,
968
1379
  timezoneID
969
1380
  });
1381
+ const hourCellClasses = scheduleTimeGridViewRecipe({
1382
+ isLastColumn: index === days.length - 1,
1383
+ isLastRow: isLastHour
1384
+ });
1385
+ const hourCellPluginProps = plugins.reduce(
1386
+ (props, plugin) => ({
1387
+ ...props,
1388
+ ...plugin.getTimeGridCellProps?.({
1389
+ date: day,
1390
+ hour,
1391
+ hourHeight: normalizedHourHeight,
1392
+ maxHour: normalizedMaxHour,
1393
+ minHour: normalizedMinHour,
1394
+ timezoneID
1395
+ })
1396
+ }),
1397
+ {}
1398
+ );
970
1399
  return /* @__PURE__ */ jsxs(
971
1400
  "div",
972
1401
  {
@@ -978,51 +1407,31 @@ function TimeGridView({
978
1407
  hourLabel,
979
1408
  timezoneID
980
1409
  }),
981
- className: cx(
982
- styles.hourCell,
983
- index === days.length - 1 && styles.lastColumn,
984
- isLastHour && styles.lastRow
985
- ),
1410
+ className: hourCellClasses.hourCell,
1411
+ "data-testid": `schedule-time-grid-cell-${day.toString()}-${hour}`,
986
1412
  role: "gridcell",
987
1413
  style: hourStyle,
1414
+ ...hourCellPluginProps,
988
1415
  children: [
989
1416
  currentTimeTop != null ? /* @__PURE__ */ jsx(
990
- "div",
1417
+ ScheduleCurrentTimeIndicator,
991
1418
  {
992
- "aria-hidden": "true",
993
- className: styles.currentTimeLine,
994
- "data-testid": "schedule-current-time-line",
995
- style: { top: `${currentTimeTop}%` }
1419
+ layout: "timeGrid",
1420
+ style: { top: `${currentTimeTop}%` },
1421
+ testId: "schedule-current-time-line"
996
1422
  }
997
1423
  ) : null,
998
- /* @__PURE__ */ jsx("div", { className: styles.events, children: visibleTimedEventLayouts.map((layout) => {
999
- const { event } = layout;
1000
- const category = getCategory(categoryMap, event);
1001
- const isPast = isEventInPast(
1002
- event,
1003
- currentTime2,
1004
- timezoneID
1005
- );
1006
- const eventClasses = scheduleEventRecipe({
1007
- layout: "block",
1008
- color: category.color,
1009
- isPast
1010
- });
1011
- return /* @__PURE__ */ jsxs(
1012
- "div",
1013
- {
1014
- className: eventClasses.event,
1015
- "data-state": isPast ? "past" : void 0,
1016
- "data-testid": `schedule-event-${event.id}`,
1017
- style: getTimedEventStyle(layout),
1018
- children: [
1019
- /* @__PURE__ */ jsx("span", { className: eventClasses.title, children: event.title }),
1020
- /* @__PURE__ */ jsx("span", { className: eventClasses.time, children: getEventTimeLabel(event, timezoneID) })
1021
- ]
1022
- },
1023
- event.id
1024
- );
1025
- }) })
1424
+ /* @__PURE__ */ jsx("div", { className: styles.events, children: visibleTimedEventLayouts.map((layout) => /* @__PURE__ */ jsx(
1425
+ TimeGridEvent,
1426
+ {
1427
+ currentTime: currentTime2,
1428
+ hourHeight: normalizedHourHeight,
1429
+ layout,
1430
+ maxHour: normalizedMaxHour,
1431
+ minHour: normalizedMinHour
1432
+ },
1433
+ layout.event.id
1434
+ )) })
1026
1435
  ]
1027
1436
  },
1028
1437
  `${day.toString()}-${hour}`
@@ -1099,6 +1508,7 @@ function ScheduleDayView({
1099
1508
  return /* @__PURE__ */ jsx(ScheduleFrame, { title: formatMonthTitle(day), titleLabel: formatDate(day), children: /* @__PURE__ */ jsx(
1100
1509
  TimeGridView,
1101
1510
  {
1511
+ allDayEventLimit: options.allDayEventLimit,
1102
1512
  days: [day],
1103
1513
  hourHeight: options.hourHeight,
1104
1514
  maxHour: options.maxHour,
@@ -1107,6 +1517,7 @@ function ScheduleDayView({
1107
1517
  ) });
1108
1518
  }
1109
1519
  function createScheduleDayView({
1520
+ allDayEventLimit = 3,
1110
1521
  hourHeight = 100,
1111
1522
  maxHour = 24,
1112
1523
  minHour = 0
@@ -1129,114 +1540,192 @@ function createScheduleDayView({
1129
1540
  label: "Previous day",
1130
1541
  range: [date.startOfDay().addDays(-1), date.startOfDay()]
1131
1542
  }),
1132
- options: { hourHeight, maxHour, minHour }
1543
+ options: { allDayEventLimit, hourHeight, maxHour, minHour }
1133
1544
  };
1134
1545
  }
1135
- var styles2 = {
1136
- list: css({
1137
- display: "flex",
1138
- flexDirection: "column"
1139
- }),
1140
- day: css({
1141
- display: "grid",
1142
- gridTemplateColumns: "112px minmax(0, 1fr)",
1143
- alignItems: "start",
1144
- columnGap: "3",
1145
- p: "3",
1146
- borderBlockEndWidth: "default",
1147
- borderBlockEndStyle: "solid",
1148
- borderBlockEndColor: "border"
1149
- }),
1150
- dayLast: css({
1151
- borderBlockEndWidth: 0
1152
- }),
1153
- dayHeading: css({
1154
- m: 0,
1155
- display: "inline-flex",
1156
- alignItems: "center",
1157
- justifyContent: "flex-start",
1158
- gap: "2",
1159
- color: "fg.muted",
1160
- fontFamily: "body",
1161
- fontSize: "lg",
1162
- fontWeight: "semibold",
1163
- lineHeight: "tight",
1164
- whiteSpace: "nowrap"
1165
- }),
1166
- dayWeekday: css({
1167
- display: "inline-block",
1168
- fontSize: "lg"
1169
- }),
1170
- dayNumber: css({
1171
- display: "inline-flex",
1172
- flexShrink: 0,
1173
- alignItems: "center",
1174
- justifyContent: "center",
1175
- w: "30px",
1176
- h: "30px",
1177
- borderRadius: "full",
1178
- fontWeight: "bold"
1179
- }),
1180
- dayNumberCurrent: css({
1181
- bg: "primary",
1182
- color: "fg.onPrimary"
1183
- }),
1184
- events: css({
1185
- display: "flex",
1186
- flexDirection: "column",
1187
- gap: "2"
1188
- }),
1189
- eventRow: css({
1190
- display: "grid",
1191
- gridTemplateColumns: "160px minmax(0, 1fr)",
1192
- alignItems: "center",
1193
- gap: "3"
1194
- }),
1195
- eventPast: css({
1196
- opacity: 0.64
1197
- }),
1198
- eventContent: css({
1199
- display: "flex",
1200
- alignItems: "center",
1201
- gap: "2",
1202
- minW: 0
1203
- }),
1204
- eventTime: css({
1205
- whiteSpace: "nowrap"
1206
- }),
1207
- nowRow: css({
1208
- h: "0.5",
1209
- bg: "fg.danger",
1210
- borderRadius: "full"
1211
- })
1212
- };
1546
+
1547
+ // src/components/Schedule/ListView.recipe.ts
1548
+ var scheduleListViewRecipe = sva({
1549
+ slots: [
1550
+ "list",
1551
+ "day",
1552
+ "dayHeading",
1553
+ "dayWeekday",
1554
+ "dayNumber",
1555
+ "events",
1556
+ "eventRow",
1557
+ "eventContent",
1558
+ "eventTime"
1559
+ ],
1560
+ base: {
1561
+ list: {
1562
+ display: "flex",
1563
+ flexDirection: "column"
1564
+ },
1565
+ day: {
1566
+ display: "grid",
1567
+ gridTemplateColumns: "112px minmax(0, 1fr)",
1568
+ alignItems: "start",
1569
+ columnGap: "3",
1570
+ p: "3",
1571
+ borderBlockEndWidth: "default",
1572
+ borderBlockEndStyle: "solid",
1573
+ borderBlockEndColor: "border"
1574
+ },
1575
+ dayHeading: {
1576
+ m: 0,
1577
+ display: "inline-flex",
1578
+ alignItems: "center",
1579
+ justifyContent: "flex-start",
1580
+ gap: "2",
1581
+ color: "fg.muted",
1582
+ fontFamily: "body",
1583
+ fontSize: "lg",
1584
+ fontWeight: "semibold",
1585
+ lineHeight: "tight",
1586
+ whiteSpace: "nowrap"
1587
+ },
1588
+ dayWeekday: {
1589
+ display: "inline-block",
1590
+ fontSize: "lg"
1591
+ },
1592
+ dayNumber: {
1593
+ display: "inline-flex",
1594
+ flexShrink: 0,
1595
+ alignItems: "center",
1596
+ justifyContent: "center",
1597
+ w: "30px",
1598
+ h: "30px",
1599
+ borderRadius: "full",
1600
+ fontWeight: "bold"
1601
+ },
1602
+ events: {
1603
+ display: "flex",
1604
+ flexDirection: "column",
1605
+ gap: "2"
1606
+ },
1607
+ eventRow: {
1608
+ display: "grid",
1609
+ gridTemplateColumns: "160px minmax(0, 1fr)",
1610
+ alignItems: "center",
1611
+ gap: "3"
1612
+ },
1613
+ eventContent: {
1614
+ display: "flex",
1615
+ alignItems: "center",
1616
+ gap: "2",
1617
+ justifySelf: "start",
1618
+ minW: 0
1619
+ },
1620
+ eventTime: {
1621
+ whiteSpace: "nowrap"
1622
+ }
1623
+ },
1624
+ variants: {
1625
+ isHighlightedDay: {
1626
+ true: {
1627
+ dayNumber: {
1628
+ bg: "primary",
1629
+ color: "fg.onPrimary"
1630
+ }
1631
+ },
1632
+ false: {}
1633
+ },
1634
+ isLastDay: {
1635
+ true: {
1636
+ day: {
1637
+ borderBlockEndWidth: 0
1638
+ }
1639
+ },
1640
+ false: {}
1641
+ },
1642
+ isPastEvent: {
1643
+ true: {
1644
+ eventRow: {
1645
+ opacity: 0.64
1646
+ }
1647
+ },
1648
+ false: {}
1649
+ },
1650
+ isInteractiveEvent: {
1651
+ true: {
1652
+ eventContent: {
1653
+ appearance: "none",
1654
+ bg: "none",
1655
+ borderWidth: 0,
1656
+ p: 0,
1657
+ m: 0,
1658
+ font: "inherit",
1659
+ textAlign: "inherit",
1660
+ color: "inherit",
1661
+ cursor: "pointer",
1662
+ borderRadius: "sm",
1663
+ _focusVisible: {
1664
+ outlineWidth: "focus",
1665
+ outlineStyle: "solid",
1666
+ outlineColor: "primary"
1667
+ }
1668
+ }
1669
+ },
1670
+ false: {}
1671
+ }
1672
+ },
1673
+ defaultVariants: {
1674
+ isHighlightedDay: false,
1675
+ isLastDay: false,
1676
+ isPastEvent: false,
1677
+ isInteractiveEvent: false
1678
+ }
1679
+ });
1680
+ var styles2 = scheduleListViewRecipe();
1213
1681
  function ListEvent({
1214
1682
  event,
1215
1683
  isPast
1216
1684
  }) {
1217
1685
  const { categoryMap, timezoneID } = useScheduleContext();
1686
+ const { popover, triggerProps } = useScheduleEventPopover(event, {
1687
+ placement: "end"
1688
+ });
1218
1689
  const category = getCategory(categoryMap, event);
1219
- return /* @__PURE__ */ jsxs(
1220
- "div",
1221
- {
1222
- className: cx(styles2.eventRow, isPast && styles2.eventPast),
1223
- "data-state": isPast ? "past" : void 0,
1224
- children: [
1225
- /* @__PURE__ */ jsx(Text, { className: styles2.eventTime, color: "secondary", type: "supporting", children: isDayEvent(event) ? "All day" : getEventTimeLabel(event, timezoneID) }),
1226
- /* @__PURE__ */ jsxs("div", { className: styles2.eventContent, children: [
1227
- /* @__PURE__ */ jsx(Tooltip, { content: category.label, hasHoverIndication: false, children: /* @__PURE__ */ jsx(
1228
- "span",
1229
- {
1230
- "aria-label": category.label,
1231
- className: scheduleEventRecipe({ color: category.color }).dot,
1232
- role: "img"
1233
- }
1234
- ) }),
1235
- /* @__PURE__ */ jsx(Text, { children: event.title })
1236
- ] })
1237
- ]
1238
- }
1239
- );
1690
+ const eventDataState = isPast ? "past" : void 0;
1691
+ const classes = scheduleListViewRecipe({
1692
+ isInteractiveEvent: triggerProps != null,
1693
+ isPastEvent: isPast
1694
+ });
1695
+ const eventContent = /* @__PURE__ */ jsxs(Fragment, { children: [
1696
+ /* @__PURE__ */ jsx(Tooltip, { content: category.label, hoverIndication: "never", children: /* @__PURE__ */ jsx(
1697
+ "span",
1698
+ {
1699
+ "aria-label": category.label,
1700
+ className: scheduleEventRecipe({ color: category.color }).dot,
1701
+ role: "img"
1702
+ }
1703
+ ) }),
1704
+ /* @__PURE__ */ jsx(Text, { children: event.title })
1705
+ ] });
1706
+ return /* @__PURE__ */ jsxs("div", { className: classes.eventRow, "data-state": eventDataState, children: [
1707
+ /* @__PURE__ */ jsx(Text, { className: classes.eventTime, color: "secondary", type: "supporting", children: isDayEvent(event) ? "All day" : getEventTimeLabel(event, timezoneID) }),
1708
+ triggerProps != null ? /* @__PURE__ */ jsx(
1709
+ "button",
1710
+ {
1711
+ className: classes.eventContent,
1712
+ "data-state": eventDataState,
1713
+ "data-testid": `schedule-event-${event.id}`,
1714
+ type: "button",
1715
+ ...triggerProps,
1716
+ children: eventContent
1717
+ }
1718
+ ) : /* @__PURE__ */ jsx(
1719
+ "div",
1720
+ {
1721
+ className: classes.eventContent,
1722
+ "data-state": eventDataState,
1723
+ "data-testid": `schedule-event-${event.id}`,
1724
+ children: eventContent
1725
+ }
1726
+ ),
1727
+ popover
1728
+ ] });
1240
1729
  }
1241
1730
  function ScheduleListView() {
1242
1731
  const { events, highlightDate, isLoading, range, timezoneID } = useScheduleContext();
@@ -1264,45 +1753,30 @@ function ScheduleListView() {
1264
1753
  return /* @__PURE__ */ jsx(ScheduleFrame, { title, titleLabel: title, children: /* @__PURE__ */ jsx("div", { className: cx(scheduleClasses.surface, styles2.list), children: visibleDays.map(
1265
1754
  ({ day, dayEvents, isCurrentDay, isHighlightedDay }, index) => {
1266
1755
  const fullDate = plainDateFormat(day, DATE_FORMAT_WITH_WEEKDAY);
1267
- return /* @__PURE__ */ jsxs(
1268
- "section",
1269
- {
1270
- className: cx(
1271
- styles2.day,
1272
- index === visibleDays.length - 1 && styles2.dayLast
1273
- ),
1274
- children: [
1275
- /* @__PURE__ */ jsxs(
1276
- "h4",
1277
- {
1278
- "aria-current": isHighlightedDay ? "date" : void 0,
1279
- "aria-label": fullDate,
1280
- className: styles2.dayHeading,
1281
- children: [
1282
- /* @__PURE__ */ jsx(
1283
- "span",
1284
- {
1285
- className: cx(
1286
- styles2.dayNumber,
1287
- isHighlightedDay && styles2.dayNumberCurrent
1288
- ),
1289
- children: day.day
1290
- }
1291
- ),
1292
- /* @__PURE__ */ jsx("span", { className: styles2.dayWeekday, children: plainDateFormat(day, { weekday: "short" }) })
1293
- ]
1294
- }
1295
- ),
1296
- /* @__PURE__ */ jsx("div", { className: styles2.events, children: renderListRows({
1297
- currentTime: currentTime2,
1298
- events: dayEvents,
1299
- isShowingCurrentTime: isCurrentDay && !isLoading,
1300
- timezoneID
1301
- }) })
1302
- ]
1303
- },
1304
- day.toString()
1305
- );
1756
+ const dayClasses = scheduleListViewRecipe({
1757
+ isHighlightedDay,
1758
+ isLastDay: index === visibleDays.length - 1
1759
+ });
1760
+ return /* @__PURE__ */ jsxs("section", { className: dayClasses.day, children: [
1761
+ /* @__PURE__ */ jsxs(
1762
+ "h4",
1763
+ {
1764
+ "aria-current": isHighlightedDay ? "date" : void 0,
1765
+ "aria-label": fullDate,
1766
+ className: dayClasses.dayHeading,
1767
+ children: [
1768
+ /* @__PURE__ */ jsx("span", { className: dayClasses.dayNumber, children: day.day }),
1769
+ /* @__PURE__ */ jsx("span", { className: dayClasses.dayWeekday, children: plainDateFormat(day, { weekday: "short" }) })
1770
+ ]
1771
+ }
1772
+ ),
1773
+ /* @__PURE__ */ jsx("div", { className: dayClasses.events, children: renderListRows({
1774
+ currentTime: currentTime2,
1775
+ events: dayEvents,
1776
+ isShowingCurrentTime: isCurrentDay && !isLoading,
1777
+ timezoneID
1778
+ }) })
1779
+ ] }, day.toString());
1306
1780
  }
1307
1781
  ) }) });
1308
1782
  }
@@ -1324,11 +1798,10 @@ function renderListRows({
1324
1798
  return rows;
1325
1799
  }
1326
1800
  const marker = /* @__PURE__ */ jsx(
1327
- "div",
1801
+ ScheduleCurrentTimeIndicator,
1328
1802
  {
1329
- "aria-hidden": "true",
1330
- className: styles2.nowRow,
1331
- "data-testid": "schedule-list-current-time"
1803
+ layout: "list",
1804
+ testId: "schedule-list-current-time"
1332
1805
  },
1333
1806
  "current-time"
1334
1807
  );
@@ -1363,127 +1836,159 @@ function createScheduleListView({
1363
1836
  options: { days }
1364
1837
  };
1365
1838
  }
1366
- var styles3 = {
1367
- grid: css({
1368
- display: "grid",
1369
- gridTemplateColumns: "repeat(7, minmax(0, 1fr))"
1370
- }),
1371
- weekday: css({
1372
- p: "2",
1373
- textAlign: "center",
1374
- borderBlockEndWidth: "default",
1375
- borderBlockEndStyle: "solid",
1376
- borderBlockEndColor: "border"
1377
- }),
1378
- cell: css({
1379
- minH: "24",
1380
- p: "0.5",
1381
- borderInlineEndWidth: "default",
1382
- borderInlineEndStyle: "solid",
1383
- borderInlineEndColor: "border",
1384
- borderBlockEndWidth: "default",
1385
- borderBlockEndStyle: "solid",
1386
- borderBlockEndColor: "border"
1387
- }),
1388
- lastColumn: css({
1389
- borderInlineEndWidth: 0
1390
- }),
1391
- lastRow: css({
1392
- borderBlockEndWidth: 0
1393
- }),
1394
- otherMonth: css({
1395
- bg: "bg.subtle",
1396
- color: "fg.muted"
1397
- }),
1398
- dayNumber: css({
1399
- display: "inline-flex",
1400
- alignItems: "center",
1401
- justifyContent: "center",
1402
- w: "6",
1403
- h: "6",
1404
- m: "0.5",
1405
- borderRadius: "full"
1406
- }),
1407
- today: css({
1408
- bg: "primary",
1409
- color: "fg.onPrimary"
1410
- }),
1411
- events: css({
1412
- display: "flex",
1413
- flexDirection: "column",
1414
- gap: "1",
1415
- m: 0,
1416
- p: 0,
1417
- listStyleType: "none"
1418
- }),
1419
- eventItem: css({
1420
- display: "flex"
1421
- }),
1422
- monthSurface: css({
1423
- position: "relative",
1424
- gridColumn: "1 / -1"
1425
- }),
1426
- monthCellGrid: css({
1427
- display: "grid",
1428
- gridTemplateColumns: "repeat(7, minmax(0, 1fr))",
1429
- gridAutoRows: "var(--schedule-month-row-height)"
1430
- }),
1431
- monthEventOverlay: css({
1432
- position: "absolute",
1433
- inset: 0,
1434
- display: "grid",
1435
- gridTemplateColumns: "repeat(7, minmax(0, 1fr))",
1436
- gridAutoRows: "var(--schedule-month-row-height)",
1437
- pointerEvents: "none"
1438
- }),
1439
- monthEventSpan: css({
1440
- alignSelf: "start",
1441
- minW: 0,
1442
- mx: "0.5",
1443
- pointerEvents: "auto",
1444
- zIndex: 1
1445
- }),
1446
- monthSeeMoreSpan: css({
1447
- alignSelf: "start",
1448
- minW: 0,
1449
- mx: "0.5",
1450
- pointerEvents: "auto",
1451
- zIndex: 2
1452
- }),
1453
- monthSeeMoreButton: css({
1454
- display: "inline-flex",
1455
- alignItems: "center",
1456
- maxW: "full",
1457
- h: "5",
1458
- px: "1",
1459
- borderRadius: "sm",
1460
- color: "primary",
1461
- cursor: "pointer",
1462
- fontSize: "xs",
1463
- fontWeight: "medium",
1464
- lineHeight: "tight",
1465
- overflow: "hidden",
1466
- textOverflow: "ellipsis",
1467
- whiteSpace: "nowrap",
1468
- _hover: {
1469
- bg: "bg.muted"
1839
+
1840
+ // src/components/Schedule/MonthlyView.recipe.ts
1841
+ var scheduleMonthlyViewRecipe = sva({
1842
+ slots: [
1843
+ "grid",
1844
+ "weekday",
1845
+ "cell",
1846
+ "dayNumber",
1847
+ "todayText",
1848
+ "monthSurface",
1849
+ "monthCellGrid",
1850
+ "monthEventOverlay",
1851
+ "monthEventSpan",
1852
+ "monthSeeMoreSpan",
1853
+ "monthSeeMoreButton",
1854
+ "monthPopoverContent",
1855
+ "monthPopoverEvents"
1856
+ ],
1857
+ base: {
1858
+ grid: {
1859
+ display: "grid",
1860
+ gridTemplateColumns: "repeat(7, minmax(0, 1fr))"
1861
+ },
1862
+ weekday: {
1863
+ p: "2",
1864
+ textAlign: "center",
1865
+ borderBlockEndWidth: "default",
1866
+ borderBlockEndStyle: "solid",
1867
+ borderBlockEndColor: "border"
1868
+ },
1869
+ cell: {
1870
+ minH: "24",
1871
+ p: "0.5",
1872
+ borderInlineEndWidth: "default",
1873
+ borderInlineEndStyle: "solid",
1874
+ borderInlineEndColor: "border",
1875
+ borderBlockEndWidth: "default",
1876
+ borderBlockEndStyle: "solid",
1877
+ borderBlockEndColor: "border"
1878
+ },
1879
+ dayNumber: {
1880
+ display: "inline-flex",
1881
+ alignItems: "center",
1882
+ justifyContent: "center",
1883
+ w: "6",
1884
+ h: "6",
1885
+ m: "0.5",
1886
+ borderRadius: "full"
1887
+ },
1888
+ monthSurface: {
1889
+ position: "relative",
1890
+ gridColumn: "1 / -1"
1891
+ },
1892
+ monthCellGrid: {
1893
+ display: "grid",
1894
+ gridTemplateColumns: "repeat(7, minmax(0, 1fr))",
1895
+ gridAutoRows: "var(--schedule-month-row-height)"
1896
+ },
1897
+ monthEventOverlay: {
1898
+ position: "absolute",
1899
+ inset: 0,
1900
+ display: "grid",
1901
+ gridTemplateColumns: "repeat(7, minmax(0, 1fr))",
1902
+ gridAutoRows: "var(--schedule-month-row-height)",
1903
+ pointerEvents: "none"
1904
+ },
1905
+ monthEventSpan: {
1906
+ alignSelf: "start",
1907
+ minW: 0,
1908
+ mx: "0.5",
1909
+ pointerEvents: "auto",
1910
+ zIndex: 1
1911
+ },
1912
+ monthSeeMoreSpan: {
1913
+ alignSelf: "start",
1914
+ minW: 0,
1915
+ mx: "0.5",
1916
+ pointerEvents: "auto",
1917
+ zIndex: 2
1918
+ },
1919
+ monthSeeMoreButton: {
1920
+ display: "inline-flex",
1921
+ alignItems: "center",
1922
+ maxW: "full",
1923
+ h: "5",
1924
+ px: "1",
1925
+ borderRadius: "sm",
1926
+ color: "primary",
1927
+ cursor: "pointer",
1928
+ fontSize: "xs",
1929
+ fontWeight: "medium",
1930
+ lineHeight: "tight",
1931
+ overflow: "hidden",
1932
+ textOverflow: "ellipsis",
1933
+ whiteSpace: "nowrap",
1934
+ _hover: {
1935
+ bg: "bg.muted"
1936
+ }
1937
+ },
1938
+ monthPopoverContent: {
1939
+ display: "flex",
1940
+ flexDirection: "column",
1941
+ gap: "1",
1942
+ p: "3"
1943
+ },
1944
+ monthPopoverEvents: {
1945
+ display: "flex",
1946
+ flexDirection: "column",
1947
+ gap: 0,
1948
+ m: 0,
1949
+ p: 0,
1950
+ listStyleType: "none"
1470
1951
  }
1471
- }),
1472
- monthPopoverContent: css({
1473
- display: "flex",
1474
- flexDirection: "column",
1475
- gap: "1",
1476
- p: "3"
1477
- }),
1478
- monthPopoverEvents: css({
1479
- display: "flex",
1480
- flexDirection: "column",
1481
- gap: 0,
1482
- m: 0,
1483
- p: 0,
1484
- listStyleType: "none"
1485
- })
1486
- };
1952
+ },
1953
+ variants: {
1954
+ isLastColumn: {
1955
+ true: { cell: { borderInlineEndWidth: 0 } },
1956
+ false: {}
1957
+ },
1958
+ isLastRow: {
1959
+ true: { cell: { borderBlockEndWidth: 0 } },
1960
+ false: {}
1961
+ },
1962
+ isOtherMonth: {
1963
+ true: {
1964
+ cell: {
1965
+ bg: "bg.subtle",
1966
+ color: "fg.muted"
1967
+ }
1968
+ },
1969
+ false: {}
1970
+ },
1971
+ isToday: {
1972
+ true: {
1973
+ dayNumber: {
1974
+ bg: "primary",
1975
+ color: "fg.onPrimary"
1976
+ },
1977
+ todayText: {
1978
+ marginInlineEnd: "1px"
1979
+ }
1980
+ },
1981
+ false: {}
1982
+ }
1983
+ },
1984
+ defaultVariants: {
1985
+ isLastColumn: false,
1986
+ isLastRow: false,
1987
+ isOtherMonth: false,
1988
+ isToday: false
1989
+ }
1990
+ });
1991
+ var styles3 = scheduleMonthlyViewRecipe();
1487
1992
  var weekdays = [
1488
1993
  { label: "Sunday", shortLabel: "Sun" },
1489
1994
  { label: "Monday", shortLabel: "Mon" },
@@ -1732,7 +2237,8 @@ function getGridCellName({
1732
2237
  function ScheduleMonthlyView({
1733
2238
  options
1734
2239
  }) {
1735
- const { categoryMap, events, highlightDate, timezoneID, viewDate } = useScheduleContext();
2240
+ const { categoryMap, events, highlightDate, plugins, timezoneID, viewDate } = useScheduleContext();
2241
+ const eventPopoverActive = hasEventPopoverPlugin(plugins);
1736
2242
  const currentTime2 = useCurrentTime();
1737
2243
  const month = viewDate.toPlainDate();
1738
2244
  const title = formatMonthTitle(month);
@@ -1790,43 +2296,52 @@ function ScheduleMonthlyView({
1790
2296
  const isCurrentMonth = day.month === month.month && day.year === month.year;
1791
2297
  const isLastColumn = index % 7 === 6;
1792
2298
  const isLastRow = index >= days.length - 7;
2299
+ const isToday = plainDateIsEqual(day, today);
2300
+ const dayClasses = scheduleMonthlyViewRecipe({
2301
+ isLastColumn,
2302
+ isLastRow,
2303
+ isOtherMonth: !isCurrentMonth,
2304
+ isToday
2305
+ });
2306
+ const dayCellPluginProps = plugins.reduce(
2307
+ (props, plugin) => ({
2308
+ ...props,
2309
+ ...plugin.getMonthCellProps?.({
2310
+ date: day,
2311
+ timezoneID
2312
+ })
2313
+ }),
2314
+ {}
2315
+ );
1793
2316
  return /* @__PURE__ */ jsx(
1794
2317
  "div",
1795
2318
  {
1796
- "aria-current": plainDateIsEqual(day, today) ? "date" : void 0,
2319
+ "aria-current": isToday ? "date" : void 0,
1797
2320
  "aria-label": getGridCellName({
1798
2321
  categoryMap,
1799
2322
  date: day,
1800
- events: dayEvents,
2323
+ // When events are interactive popover triggers they expose
2324
+ // their own accessible names, so omit them here to avoid
2325
+ // announcing each event twice.
2326
+ events: eventPopoverActive ? [] : dayEvents,
1801
2327
  timezoneID
1802
2328
  }),
1803
- className: cx(
1804
- styles3.cell,
1805
- isLastColumn ? styles3.lastColumn : void 0,
1806
- isLastRow ? styles3.lastRow : void 0,
1807
- !isCurrentMonth ? styles3.otherMonth : void 0
1808
- ),
2329
+ className: dayClasses.cell,
2330
+ "data-testid": `schedule-month-cell-${day.toString()}`,
1809
2331
  role: "gridcell",
1810
- children: /* @__PURE__ */ jsx(
1811
- "span",
2332
+ ...dayCellPluginProps,
2333
+ children: /* @__PURE__ */ jsx("span", { className: dayClasses.dayNumber, children: /* @__PURE__ */ jsx(
2334
+ Text,
1812
2335
  {
1813
- className: cx(
1814
- styles3.dayNumber,
1815
- plainDateIsEqual(day, today) ? styles3.today : void 0
1816
- ),
1817
- children: /* @__PURE__ */ jsx(
1818
- Text,
1819
- {
1820
- as: "span",
1821
- color: "inherit",
1822
- hasTabularNumbers: true,
1823
- type: "supporting",
1824
- weight: "medium",
1825
- children: day.day
1826
- }
1827
- )
2336
+ as: "span",
2337
+ className: dayClasses.todayText,
2338
+ color: "inherit",
2339
+ hasTabularNumbers: true,
2340
+ type: "supporting",
2341
+ weight: "medium",
2342
+ children: day.day
1828
2343
  }
1829
- )
2344
+ ) })
1830
2345
  },
1831
2346
  day.toString()
1832
2347
  );
@@ -1835,7 +2350,7 @@ function ScheduleMonthlyView({
1835
2350
  visibleEventSegments.map((segment) => /* @__PURE__ */ jsx(
1836
2351
  "div",
1837
2352
  {
1838
- "aria-hidden": "true",
2353
+ "aria-hidden": eventPopoverActive ? void 0 : "true",
1839
2354
  className: styles3.monthEventSpan,
1840
2355
  "data-testid": `schedule-event-span-${segment.event.id}`,
1841
2356
  style: getMonthEventSegmentStyle(segment),
@@ -1865,40 +2380,23 @@ function ScheduleMonthlyView({
1865
2380
  level: Math.max(0, monthEventLevelCount - 1)
1866
2381
  }),
1867
2382
  children: /* @__PURE__ */ jsx(
1868
- Popover,
2383
+ ScheduleEventOverflowPopover,
1869
2384
  {
1870
- content: /* @__PURE__ */ jsxs("div", { className: styles3.monthPopoverContent, children: [
1871
- /* @__PURE__ */ jsx(Heading, { level: 4, children: dateLabel }),
1872
- /* @__PURE__ */ jsx("ul", { className: styles3.monthPopoverEvents, children: (eventsByDate.get(day.toString()) ?? []).map(
1873
- (event) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
1874
- CalendarMonthEventPill,
1875
- {
1876
- event,
1877
- isPast: isEventInPast(
1878
- event,
1879
- currentTime2,
1880
- timezoneID
1881
- )
1882
- }
1883
- ) }, event.id)
1884
- ) })
1885
- ] }),
1886
- "data-testid": `schedule-month-see-more-${day.toString()}`,
2385
+ buttonClassName: styles3.monthSeeMoreButton,
2386
+ contentClassName: styles3.monthPopoverContent,
2387
+ events: eventsByDate.get(day.toString()) ?? [],
2388
+ eventsClassName: styles3.monthPopoverEvents,
2389
+ hiddenEventCount: hiddenEvents.length,
1887
2390
  label,
1888
- width: 320,
1889
- children: /* @__PURE__ */ jsxs(
1890
- "button",
2391
+ renderEvent: (event) => /* @__PURE__ */ jsx(
2392
+ CalendarMonthEventPill,
1891
2393
  {
1892
- "aria-label": label,
1893
- className: styles3.monthSeeMoreButton,
1894
- type: "button",
1895
- children: [
1896
- "+",
1897
- hiddenEvents.length,
1898
- " more"
1899
- ]
2394
+ event,
2395
+ isPast: isEventInPast(event, currentTime2, timezoneID)
1900
2396
  }
1901
- )
2397
+ ),
2398
+ testId: `schedule-month-see-more-${day.toString()}`,
2399
+ title: dateLabel
1902
2400
  }
1903
2401
  )
1904
2402
  },
@@ -1944,6 +2442,706 @@ function createScheduleMonthlyView({
1944
2442
  options: { monthRowHeight, weekCount, weekStartsOn }
1945
2443
  };
1946
2444
  }
2445
+ var DEFAULT_SNAP_MINUTES = 15;
2446
+ var MILLISECONDS_PER_MINUTE = 6e4;
2447
+ var MINUTES_PER_DAY = 24 * 60;
2448
+ function getSnappedMinutes(minutes, snapMinutes) {
2449
+ return Math.round(minutes / snapMinutes) * snapMinutes;
2450
+ }
2451
+ function getTimeGridStartMinutes({
2452
+ drag,
2453
+ hour,
2454
+ pointerOffsetMinutes,
2455
+ snapMinutes
2456
+ }) {
2457
+ return getSnappedMinutes(
2458
+ hour * 60 + pointerOffsetMinutes - drag.offsetMinutes,
2459
+ snapMinutes
2460
+ );
2461
+ }
2462
+ function instantFromDateAndMinutes(date, minutes, timezoneID) {
2463
+ const clampedMinutes = Math.round(
2464
+ Math.max(0, Math.min(MINUTES_PER_DAY - 1, minutes))
2465
+ );
2466
+ const hour = Math.floor(clampedMinutes / 60);
2467
+ const minute = clampedMinutes % 60;
2468
+ return date.toPlainDateTime(Temporal.PlainTime.from({ hour, minute })).toZonedDateTime(timezoneID).epochMilliseconds;
2469
+ }
2470
+ function moveEventToDate(event, date, timezoneID) {
2471
+ if (isDayEvent(event)) {
2472
+ const durationDays = event.start.until(event.end).days;
2473
+ return {
2474
+ end: date.add({ days: durationDays }),
2475
+ event,
2476
+ start: date
2477
+ };
2478
+ }
2479
+ const startTime = Temporal.Instant.fromEpochMilliseconds(event.start).toZonedDateTimeISO(timezoneID).toPlainTime();
2480
+ const start = date.toPlainDateTime(startTime).toZonedDateTime(timezoneID).epochMilliseconds;
2481
+ return {
2482
+ end: start + (event.end - event.start),
2483
+ event,
2484
+ start
2485
+ };
2486
+ }
2487
+ function moveEventToDateTime({
2488
+ date,
2489
+ drag,
2490
+ hour,
2491
+ pointerOffsetMinutes,
2492
+ snapMinutes,
2493
+ timezoneID
2494
+ }) {
2495
+ if (isDayEvent(drag.event)) {
2496
+ return null;
2497
+ }
2498
+ const startMinutes = getTimeGridStartMinutes({
2499
+ drag,
2500
+ hour,
2501
+ pointerOffsetMinutes,
2502
+ snapMinutes
2503
+ });
2504
+ const start = instantFromDateAndMinutes(date, startMinutes, timezoneID);
2505
+ return {
2506
+ end: start + (drag.event.end - drag.event.start),
2507
+ event: drag.event,
2508
+ start
2509
+ };
2510
+ }
2511
+ function hasChanged({
2512
+ end,
2513
+ event,
2514
+ start
2515
+ }) {
2516
+ return event.start !== start || event.end !== end;
2517
+ }
2518
+ function getDragEventClientY(dragEvent, fallback) {
2519
+ return Number.isFinite(dragEvent.clientY) ? dragEvent.clientY : fallback;
2520
+ }
2521
+ function applyDragPreview(drag, targetLeft, targetTop) {
2522
+ drag.previewElement.style.left = `${targetLeft}px`;
2523
+ drag.previewElement.style.top = `${targetTop}px`;
2524
+ }
2525
+ function resetDragPreview(drag) {
2526
+ drag.sourceElement.style.opacity = drag.initialOpacity;
2527
+ drag.previewElement.remove();
2528
+ }
2529
+ function createDragPreviewElement(event, sourceElement, sourceRect) {
2530
+ const preview = sourceElement.cloneNode(true);
2531
+ if (!(preview instanceof HTMLElement)) {
2532
+ throw new Error("Schedule event preview must be an HTMLElement.");
2533
+ }
2534
+ preview.setAttribute("aria-hidden", "true");
2535
+ preview.setAttribute(
2536
+ "data-testid",
2537
+ `schedule-event-move-preview-${event.id}`
2538
+ );
2539
+ preview.style.position = "fixed";
2540
+ preview.style.inset = "auto";
2541
+ preview.style.left = `${sourceRect.left}px`;
2542
+ preview.style.top = `${sourceRect.top}px`;
2543
+ preview.style.width = `${sourceRect.width}px`;
2544
+ preview.style.height = `${sourceRect.height}px`;
2545
+ preview.style.margin = "0";
2546
+ preview.style.opacity = "0.45";
2547
+ preview.style.pointerEvents = "none";
2548
+ preview.style.transform = "none";
2549
+ preview.style.zIndex = "1000";
2550
+ document.body.append(preview);
2551
+ return preview;
2552
+ }
2553
+ function createScheduleEventMovePlugin({
2554
+ dragRef,
2555
+ onMove,
2556
+ snapMinutes = DEFAULT_SNAP_MINUTES
2557
+ }) {
2558
+ const normalizedSnapMinutes = Number.isFinite(snapMinutes) && snapMinutes > 0 ? Math.max(1, Math.floor(snapMinutes)) : DEFAULT_SNAP_MINUTES;
2559
+ return {
2560
+ getEventProps({
2561
+ event,
2562
+ layout,
2563
+ timezoneID
2564
+ }) {
2565
+ if (layout !== "month" && (layout !== "timeGrid" || isDayEvent(event))) {
2566
+ return {};
2567
+ }
2568
+ return {
2569
+ draggable: true,
2570
+ onDragEnd: () => {
2571
+ if (dragRef.current != null) {
2572
+ resetDragPreview(dragRef.current);
2573
+ }
2574
+ dragRef.current = null;
2575
+ },
2576
+ onDragStart: (dragEvent) => {
2577
+ const element = dragEvent.currentTarget;
2578
+ const sourceRect = element.getBoundingClientRect();
2579
+ const isTimedTimeGridEvent = layout === "timeGrid" && !isDayEvent(event);
2580
+ const eventStartTime = isDayEvent(event) ? null : Temporal.Instant.fromEpochMilliseconds(event.start).toZonedDateTimeISO(timezoneID).toPlainTime();
2581
+ const eventStartMinutes = eventStartTime == null ? 0 : eventStartTime.hour * 60 + eventStartTime.minute;
2582
+ let offsetMinutes = eventStartMinutes;
2583
+ if (isTimedTimeGridEvent) {
2584
+ const durationMinutes = Math.max(
2585
+ 15,
2586
+ (event.end - event.start) / MILLISECONDS_PER_MINUTE
2587
+ );
2588
+ offsetMinutes = Math.max(
2589
+ 0,
2590
+ (getDragEventClientY(dragEvent, sourceRect.top) - sourceRect.top) / Math.max(1, sourceRect.height) * durationMinutes
2591
+ );
2592
+ }
2593
+ dragEvent.dataTransfer.setData("text/plain", event.id);
2594
+ dragEvent.dataTransfer.setDragImage(element, 0, 0);
2595
+ dragRef.current = {
2596
+ event,
2597
+ initialOpacity: element.style.opacity,
2598
+ offsetMinutes,
2599
+ previewElement: createDragPreviewElement(
2600
+ event,
2601
+ element,
2602
+ sourceRect
2603
+ ),
2604
+ sourceElement: element,
2605
+ sourceRect
2606
+ };
2607
+ element.style.opacity = "0.25";
2608
+ }
2609
+ };
2610
+ },
2611
+ getMonthCellProps({
2612
+ date,
2613
+ timezoneID
2614
+ }) {
2615
+ return {
2616
+ onDragOver: (dragEvent) => {
2617
+ if (dragRef.current != null) {
2618
+ dragEvent.preventDefault();
2619
+ const rect = dragEvent.currentTarget.getBoundingClientRect();
2620
+ applyDragPreview(dragRef.current, rect.left + 4, rect.top + 30);
2621
+ }
2622
+ },
2623
+ onDrop: (dragEvent) => {
2624
+ const drag = dragRef.current;
2625
+ if (drag == null) {
2626
+ return;
2627
+ }
2628
+ dragEvent.preventDefault();
2629
+ const change = moveEventToDate(drag.event, date, timezoneID);
2630
+ if (hasChanged(change)) {
2631
+ onMove(change);
2632
+ }
2633
+ resetDragPreview(drag);
2634
+ dragRef.current = null;
2635
+ }
2636
+ };
2637
+ },
2638
+ getTimeGridCellProps({
2639
+ date,
2640
+ hour,
2641
+ hourHeight,
2642
+ timezoneID
2643
+ }) {
2644
+ return {
2645
+ onDragOver: (dragEvent) => {
2646
+ if (dragRef.current != null && !isDayEvent(dragRef.current.event)) {
2647
+ dragEvent.preventDefault();
2648
+ const rect = dragEvent.currentTarget.getBoundingClientRect();
2649
+ const pointerOffsetMinutes = (getDragEventClientY(dragEvent, rect.top) - rect.top) / Math.max(1, hourHeight) * 60;
2650
+ const startMinutes = getTimeGridStartMinutes({
2651
+ drag: dragRef.current,
2652
+ hour,
2653
+ pointerOffsetMinutes,
2654
+ snapMinutes: normalizedSnapMinutes
2655
+ });
2656
+ const top = rect.top + (startMinutes - hour * 60) / 60 * hourHeight + 2;
2657
+ applyDragPreview(dragRef.current, rect.left + 2, top);
2658
+ }
2659
+ },
2660
+ onDrop: (dragEvent) => {
2661
+ const drag = dragRef.current;
2662
+ if (drag == null || isDayEvent(drag.event)) {
2663
+ return;
2664
+ }
2665
+ dragEvent.preventDefault();
2666
+ const rect = dragEvent.currentTarget.getBoundingClientRect();
2667
+ const pointerOffsetMinutes = (getDragEventClientY(dragEvent, rect.top) - rect.top) / Math.max(1, hourHeight) * 60;
2668
+ const change = moveEventToDateTime({
2669
+ date,
2670
+ drag,
2671
+ hour,
2672
+ pointerOffsetMinutes,
2673
+ snapMinutes: normalizedSnapMinutes,
2674
+ timezoneID
2675
+ });
2676
+ if (change != null && hasChanged(change)) {
2677
+ onMove(change);
2678
+ }
2679
+ resetDragPreview(drag);
2680
+ dragRef.current = null;
2681
+ }
2682
+ };
2683
+ }
2684
+ };
2685
+ }
2686
+ function useScheduleEventMovePlugin(options) {
2687
+ const optionsRef = useLatest_default(options);
2688
+ const dragRef = useRef(null);
2689
+ const onMove = useCallback(
2690
+ (change) => {
2691
+ optionsRef.current.onMove(change);
2692
+ },
2693
+ [optionsRef]
2694
+ );
2695
+ return useMemo(() => {
2696
+ return createScheduleEventMovePlugin({
2697
+ dragRef,
2698
+ onMove,
2699
+ snapMinutes: options.snapMinutes
2700
+ });
2701
+ }, [dragRef, onMove, options.snapMinutes]);
2702
+ }
2703
+ var MIN_DURATION_MINUTES = 15;
2704
+ var DEFAULT_SNAP_MINUTES2 = 15;
2705
+ var MILLISECONDS_PER_MINUTE2 = 6e4;
2706
+ var resizeHandle = cva({
2707
+ base: {
2708
+ position: "absolute",
2709
+ insetInline: 0,
2710
+ h: "3",
2711
+ cursor: "ns-resize",
2712
+ touchAction: "none",
2713
+ _focusVisible: {
2714
+ outlineWidth: "focus",
2715
+ outlineStyle: "solid",
2716
+ outlineColor: "primary",
2717
+ outlineOffset: "-2px"
2718
+ }
2719
+ },
2720
+ variants: {
2721
+ edge: {
2722
+ start: {
2723
+ insetBlockStart: 0
2724
+ },
2725
+ end: {
2726
+ insetBlockEnd: 0
2727
+ }
2728
+ }
2729
+ }
2730
+ });
2731
+ var resizeHandleClassNames = {
2732
+ end: resizeHandle({ edge: "end" }),
2733
+ start: resizeHandle({ edge: "start" })
2734
+ };
2735
+ function getDurationMinutes(start, end) {
2736
+ return (end - start) / MILLISECONDS_PER_MINUTE2;
2737
+ }
2738
+ function getSnappedDeltaMinutes(deltaPixels, hourHeight, snapMinutes) {
2739
+ const rawMinutes = deltaPixels / hourHeight * 60;
2740
+ return Math.round(rawMinutes / snapMinutes) * snapMinutes;
2741
+ }
2742
+ function getResizeRange(state, clientY) {
2743
+ const deltaMinutes = getSnappedDeltaMinutes(
2744
+ clientY - state.initialPointerY,
2745
+ state.hourHeight,
2746
+ state.snapMinutes
2747
+ );
2748
+ const delta = deltaMinutes * MILLISECONDS_PER_MINUTE2;
2749
+ const minDuration = MIN_DURATION_MINUTES * MILLISECONDS_PER_MINUTE2;
2750
+ if (state.edge === "start") {
2751
+ return {
2752
+ end: state.event.end,
2753
+ start: Math.min(state.event.end - minDuration, state.event.start + delta)
2754
+ };
2755
+ }
2756
+ return {
2757
+ end: Math.max(state.event.start + minDuration, state.event.end + delta),
2758
+ start: state.event.start
2759
+ };
2760
+ }
2761
+ function getPreviewHeight(state, range) {
2762
+ return `${Math.max(
2763
+ 36,
2764
+ getDurationMinutes(range.start, range.end) / 60 * state.hourHeight - 5
2765
+ )}px`;
2766
+ }
2767
+ function getPreviewTop(state, range) {
2768
+ const initialTop = Number.parseFloat(state.initialTop || "0");
2769
+ if (state.edge === "end") {
2770
+ return state.initialTop;
2771
+ }
2772
+ const deltaMinutes = getDurationMinutes(state.event.start, range.start);
2773
+ return `${initialTop + deltaMinutes / 60 * state.hourHeight}px`;
2774
+ }
2775
+ function applyPreview(state, range) {
2776
+ state.eventElement.style.height = getPreviewHeight(state, range);
2777
+ state.eventElement.style.top = getPreviewTop(state, range);
2778
+ }
2779
+ function ScheduleEventResizeHandle({
2780
+ edge,
2781
+ event,
2782
+ hourHeight,
2783
+ onResize,
2784
+ snapMinutes
2785
+ }) {
2786
+ const resizeStateRef = useRef(null);
2787
+ const pointerListenersRef = useRef(null);
2788
+ const removePointerListeners = useCallback(() => {
2789
+ const listeners2 = pointerListenersRef.current;
2790
+ if (listeners2 == null) {
2791
+ return;
2792
+ }
2793
+ window.removeEventListener("pointermove", listeners2.move);
2794
+ window.removeEventListener("pointerup", listeners2.up);
2795
+ window.removeEventListener("pointercancel", listeners2.cancel);
2796
+ pointerListenersRef.current = null;
2797
+ }, []);
2798
+ const finishResize = useCallback((clientY, isCommit) => {
2799
+ const state = resizeStateRef.current;
2800
+ if (state == null) {
2801
+ return;
2802
+ }
2803
+ const range = getResizeRange(state, clientY);
2804
+ if (isCommit) {
2805
+ if (range.start !== state.event.start || range.end !== state.event.end) {
2806
+ state.onResize({
2807
+ end: range.end,
2808
+ event: state.event,
2809
+ start: range.start
2810
+ });
2811
+ }
2812
+ } else {
2813
+ state.eventElement.style.height = state.initialHeight;
2814
+ state.eventElement.style.top = state.initialTop;
2815
+ }
2816
+ resizeStateRef.current = null;
2817
+ }, []);
2818
+ const handlePointerMove = useCallback((event2) => {
2819
+ const state = resizeStateRef.current;
2820
+ if (state == null) {
2821
+ return;
2822
+ }
2823
+ applyPreview(state, getResizeRange(state, event2.clientY));
2824
+ }, []);
2825
+ const handlePointerUp = useCallback(
2826
+ (event2) => {
2827
+ removePointerListeners();
2828
+ finishResize(event2.clientY, true);
2829
+ },
2830
+ [finishResize, removePointerListeners]
2831
+ );
2832
+ const handlePointerCancel = useCallback(
2833
+ (event2) => {
2834
+ removePointerListeners();
2835
+ finishResize(event2.clientY, false);
2836
+ },
2837
+ [finishResize, removePointerListeners]
2838
+ );
2839
+ const handlePointerDown = useCallback(
2840
+ (pointerEvent) => {
2841
+ pointerEvent.preventDefault();
2842
+ pointerEvent.stopPropagation();
2843
+ const eventElement = pointerEvent.currentTarget.parentElement;
2844
+ if (!(eventElement instanceof HTMLElement)) {
2845
+ return;
2846
+ }
2847
+ resizeStateRef.current = {
2848
+ edge,
2849
+ event,
2850
+ eventElement,
2851
+ hourHeight,
2852
+ initialHeight: eventElement.style.height,
2853
+ initialPointerY: pointerEvent.clientY,
2854
+ initialTop: eventElement.style.top,
2855
+ onResize,
2856
+ snapMinutes
2857
+ };
2858
+ pointerListenersRef.current = {
2859
+ cancel: handlePointerCancel,
2860
+ move: handlePointerMove,
2861
+ up: handlePointerUp
2862
+ };
2863
+ window.addEventListener("pointermove", handlePointerMove);
2864
+ window.addEventListener("pointerup", handlePointerUp);
2865
+ window.addEventListener("pointercancel", handlePointerCancel);
2866
+ },
2867
+ [
2868
+ edge,
2869
+ event,
2870
+ handlePointerCancel,
2871
+ handlePointerMove,
2872
+ handlePointerUp,
2873
+ hourHeight,
2874
+ onResize,
2875
+ snapMinutes
2876
+ ]
2877
+ );
2878
+ const handleKeyDown = useCallback(
2879
+ (keyEvent) => {
2880
+ const direction = keyEvent.key === "ArrowDown" ? 1 : keyEvent.key === "ArrowUp" ? -1 : 0;
2881
+ if (direction === 0) {
2882
+ return;
2883
+ }
2884
+ keyEvent.preventDefault();
2885
+ keyEvent.stopPropagation();
2886
+ const delta = direction * snapMinutes * MILLISECONDS_PER_MINUTE2;
2887
+ const minDuration = MIN_DURATION_MINUTES * MILLISECONDS_PER_MINUTE2;
2888
+ const range = edge === "start" ? {
2889
+ end: event.end,
2890
+ start: Math.min(event.end - minDuration, event.start + delta)
2891
+ } : {
2892
+ end: Math.max(event.start + minDuration, event.end + delta),
2893
+ start: event.start
2894
+ };
2895
+ if (range.start !== event.start || range.end !== event.end) {
2896
+ onResize({ event, ...range });
2897
+ }
2898
+ },
2899
+ [edge, event, onResize, snapMinutes]
2900
+ );
2901
+ return /* @__PURE__ */ jsx(
2902
+ "span",
2903
+ {
2904
+ "aria-label": `${edge === "start" ? "Resize start of" : "Resize end of"} ${event.title}`,
2905
+ "aria-orientation": "vertical",
2906
+ "aria-valuemax": event.end,
2907
+ "aria-valuemin": event.start,
2908
+ "aria-valuenow": edge === "start" ? event.start : event.end,
2909
+ className: resizeHandleClassNames[edge],
2910
+ "data-testid": `schedule-event-resize-${edge}-handle-${event.id}`,
2911
+ onClick: (event2) => event2.stopPropagation(),
2912
+ onKeyDown: handleKeyDown,
2913
+ onPointerDown: handlePointerDown,
2914
+ role: "slider",
2915
+ tabIndex: 0
2916
+ }
2917
+ );
2918
+ }
2919
+ function ScheduleEventResizeHandles({
2920
+ event,
2921
+ hourHeight,
2922
+ onResize,
2923
+ snapMinutes
2924
+ }) {
2925
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
2926
+ /* @__PURE__ */ jsx(
2927
+ ScheduleEventResizeHandle,
2928
+ {
2929
+ edge: "start",
2930
+ event,
2931
+ hourHeight,
2932
+ onResize,
2933
+ snapMinutes
2934
+ }
2935
+ ),
2936
+ /* @__PURE__ */ jsx(
2937
+ ScheduleEventResizeHandle,
2938
+ {
2939
+ edge: "end",
2940
+ event,
2941
+ hourHeight,
2942
+ onResize,
2943
+ snapMinutes
2944
+ }
2945
+ )
2946
+ ] });
2947
+ }
2948
+ function createScheduleEventResizePlugin({
2949
+ onResize,
2950
+ snapMinutes = DEFAULT_SNAP_MINUTES2
2951
+ }) {
2952
+ const normalizedSnapMinutes = Number.isFinite(snapMinutes) && snapMinutes > 0 ? Math.max(1, Math.floor(snapMinutes)) : DEFAULT_SNAP_MINUTES2;
2953
+ return {
2954
+ renderTimeGridEventContent({
2955
+ event,
2956
+ hourHeight
2957
+ }) {
2958
+ if (isDayEvent(event)) {
2959
+ return null;
2960
+ }
2961
+ return /* @__PURE__ */ jsx(
2962
+ ScheduleEventResizeHandles,
2963
+ {
2964
+ event,
2965
+ hourHeight,
2966
+ onResize,
2967
+ snapMinutes: normalizedSnapMinutes
2968
+ }
2969
+ );
2970
+ }
2971
+ };
2972
+ }
2973
+ function useScheduleEventResizePlugin(options) {
2974
+ const optionsRef = useLatest_default(options);
2975
+ const onResize = useCallback(
2976
+ (change) => {
2977
+ optionsRef.current.onResize(change);
2978
+ },
2979
+ [optionsRef]
2980
+ );
2981
+ return useMemo(
2982
+ () => createScheduleEventResizePlugin({
2983
+ onResize,
2984
+ snapMinutes: options.snapMinutes
2985
+ }),
2986
+ [onResize, options.snapMinutes]
2987
+ );
2988
+ }
2989
+ var styles4 = {
2990
+ layout: css({
2991
+ minW: "80",
2992
+ maxW: "96"
2993
+ }),
2994
+ dot: css({
2995
+ w: "3",
2996
+ h: "3"
2997
+ }),
2998
+ dateValue: css({
2999
+ display: "flex",
3000
+ flexDirection: "column"
3001
+ }),
3002
+ footerActions: css({
3003
+ display: "flex",
3004
+ justifyContent: "flex-end"
3005
+ })
3006
+ };
3007
+ function getEventDateLabel(event, timezoneID) {
3008
+ const startDate = isDayEvent(event) ? event.start : plainDateFromInstant(event.start, timezoneID);
3009
+ return formatDate(startDate);
3010
+ }
3011
+ function ScheduleEventPopoverContent({
3012
+ event,
3013
+ onClose,
3014
+ onDelete,
3015
+ onEdit,
3016
+ onRespond
3017
+ }) {
3018
+ const { categoryMap, timezoneID } = useScheduleContext();
3019
+ const [response, setResponse] = useState(null);
3020
+ const category = getCategory(categoryMap, event);
3021
+ const dotClass = scheduleEventRecipe({ color: category.color }).dot;
3022
+ return /* @__PURE__ */ jsx(
3023
+ Layout,
3024
+ {
3025
+ className: styles4.layout,
3026
+ content: /* @__PURE__ */ jsx(LayoutContent, { isScrollable: false, padding: 3, children: /* @__PURE__ */ jsxs(MetadataList, { children: [
3027
+ /* @__PURE__ */ jsx(
3028
+ MetadataListItem,
3029
+ {
3030
+ icon: CalendarDays,
3031
+ isIconOnly: true,
3032
+ label: "Date and time",
3033
+ children: /* @__PURE__ */ jsxs("span", { className: styles4.dateValue, children: [
3034
+ /* @__PURE__ */ jsx(Text, { children: getEventDateLabel(event, timezoneID) }),
3035
+ /* @__PURE__ */ jsx(Text, { color: "secondary", type: "supporting", children: getEventTimeLabel(event, timezoneID) })
3036
+ ] })
3037
+ }
3038
+ ),
3039
+ event.location != null && event.location !== "" ? /* @__PURE__ */ jsx(MetadataListItem, { icon: MapPin, isIconOnly: true, label: "Location", children: event.location }) : null,
3040
+ event.description != null && event.description !== "" ? /* @__PURE__ */ jsx(MetadataListItem, { icon: AlignLeft, isIconOnly: true, label: "Description", children: event.description }) : null,
3041
+ /* @__PURE__ */ jsx(MetadataListItem, { icon: Tag, isIconOnly: true, label: "Category", children: category.label })
3042
+ ] }) }),
3043
+ "data-testid": "schedule-event-popover",
3044
+ footer: /* @__PURE__ */ jsx(LayoutFooter, { label: "Your response", padding: 3, children: /* @__PURE__ */ jsx("div", { className: styles4.footerActions, children: /* @__PURE__ */ jsxs(
3045
+ ToggleButtonGroup,
3046
+ {
3047
+ label: "Your response",
3048
+ onChange: (value) => {
3049
+ setResponse(value);
3050
+ onRespond?.(event, value);
3051
+ },
3052
+ size: "sm",
3053
+ type: "single",
3054
+ value: response,
3055
+ children: [
3056
+ /* @__PURE__ */ jsx(ToggleButton, { label: "Not Going", value: "not-going" }),
3057
+ /* @__PURE__ */ jsx(ToggleButton, { label: "Maybe", value: "maybe" }),
3058
+ /* @__PURE__ */ jsx(
3059
+ ToggleButton,
3060
+ {
3061
+ "data-testid": "schedule-event-popover-response-going",
3062
+ label: "Going",
3063
+ value: "going"
3064
+ }
3065
+ )
3066
+ ]
3067
+ }
3068
+ ) }) }),
3069
+ header: /* @__PURE__ */ jsx(
3070
+ LayoutHeader,
3071
+ {
3072
+ align: "center",
3073
+ endContent: /* @__PURE__ */ jsxs(Fragment, { children: [
3074
+ onEdit != null ? /* @__PURE__ */ jsx(
3075
+ Button,
3076
+ {
3077
+ "data-testid": "schedule-event-popover-edit",
3078
+ icon: Pencil,
3079
+ isIconOnly: true,
3080
+ label: "Edit event",
3081
+ onClick: () => onEdit(event),
3082
+ size: "sm",
3083
+ variant: "ghost"
3084
+ }
3085
+ ) : null,
3086
+ onDelete != null ? /* @__PURE__ */ jsx(
3087
+ Button,
3088
+ {
3089
+ "data-testid": "schedule-event-popover-delete",
3090
+ icon: Trash2,
3091
+ isIconOnly: true,
3092
+ label: "Delete event",
3093
+ onClick: () => onDelete(event),
3094
+ size: "sm",
3095
+ variant: "ghost"
3096
+ }
3097
+ ) : null,
3098
+ /* @__PURE__ */ jsx(
3099
+ Button,
3100
+ {
3101
+ "data-testid": "schedule-event-popover-close",
3102
+ icon: X,
3103
+ isIconOnly: true,
3104
+ label: "Close",
3105
+ onClick: onClose,
3106
+ size: "sm",
3107
+ variant: "ghost"
3108
+ }
3109
+ )
3110
+ ] }),
3111
+ padding: 3,
3112
+ startContent: /* @__PURE__ */ jsx("span", { className: cx(dotClass, styles4.dot) }),
3113
+ title: event.title
3114
+ }
3115
+ ),
3116
+ height: "auto"
3117
+ }
3118
+ );
3119
+ }
3120
+ function createScheduleEventPopoverPlugin(options) {
3121
+ const { renderContent } = options;
3122
+ return {
3123
+ renderEventPopover(event, controls) {
3124
+ const typedEvent = event;
3125
+ if (renderContent != null) {
3126
+ return renderContent({ event: typedEvent, ...controls });
3127
+ }
3128
+ return /* @__PURE__ */ jsx(
3129
+ ScheduleEventPopoverContent,
3130
+ {
3131
+ event: typedEvent,
3132
+ onClose: controls.close
3133
+ }
3134
+ );
3135
+ }
3136
+ };
3137
+ }
3138
+ function useScheduleEventPopoverPlugin(options = {}) {
3139
+ const { renderContent } = options;
3140
+ return useMemo(
3141
+ () => createScheduleEventPopoverPlugin({ renderContent }),
3142
+ [renderContent]
3143
+ );
3144
+ }
1947
3145
  function SchedulePaginationControls({
1948
3146
  onViewDateChange
1949
3147
  }) {
@@ -2280,6 +3478,7 @@ function ScheduleWeeklyView({
2280
3478
  return /* @__PURE__ */ jsx(ScheduleFrame, { title, titleLabel: title, children: /* @__PURE__ */ jsx(
2281
3479
  TimeGridView,
2282
3480
  {
3481
+ allDayEventLimit: options.allDayEventLimit,
2283
3482
  days,
2284
3483
  hourHeight: options.hourHeight,
2285
3484
  maxHour: options.maxHour,
@@ -2288,6 +3487,7 @@ function ScheduleWeeklyView({
2288
3487
  ) });
2289
3488
  }
2290
3489
  function createScheduleWeeklyView({
3490
+ allDayEventLimit = 3,
2291
3491
  hourHeight = 100,
2292
3492
  maxHour = 24,
2293
3493
  minHour = 0,
@@ -2316,7 +3516,7 @@ function createScheduleWeeklyView({
2316
3516
  label: "Previous week",
2317
3517
  range: getWeekRange(date.addDays(-7))
2318
3518
  }),
2319
- options: { hourHeight, maxHour, minHour, weekStartsOn }
3519
+ options: { allDayEventLimit, hourHeight, maxHour, minHour, weekStartsOn }
2320
3520
  };
2321
3521
  }
2322
3522
  function setStartOfWeek2(date, weekStartsOn) {
@@ -2324,6 +3524,6 @@ function setStartOfWeek2(date, weekStartsOn) {
2324
3524
  return date.add({ days: -daysSinceWeekStart });
2325
3525
  }
2326
3526
 
2327
- export { Schedule, ScheduleContext, createEventFromISO, createScheduleDayView, createScheduleListView, createScheduleMonthlyView, createScheduleWeeklyView, defaultSchedulePlugins, useScheduleContext, useSchedulePaginationPlugin, useScheduleViewSelectorPlugin };
2328
- //# sourceMappingURL=chunk-GSTINE4X.js.map
2329
- //# sourceMappingURL=chunk-GSTINE4X.js.map
3527
+ export { Schedule, ScheduleContext, ScheduleEventPopoverContent, createEventFromISO, createScheduleDayView, createScheduleListView, createScheduleMonthlyView, createScheduleWeeklyView, defaultSchedulePlugins, useScheduleContext, useScheduleEventMovePlugin, useScheduleEventPopoverPlugin, useScheduleEventResizePlugin, useSchedulePaginationPlugin, useScheduleViewSelectorPlugin };
3528
+ //# sourceMappingURL=chunk-O3UT5D57.js.map
3529
+ //# sourceMappingURL=chunk-O3UT5D57.js.map