@arbidocs/blocks 0.5.91 → 0.5.92
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.
- package/dist/{ConnectedCallDock-PJE7EZ6T.js → ConnectedCallDock-H5ABOXNR.js} +13 -13
- package/dist/{ConnectedCallDock-PJE7EZ6T.js.map → ConnectedCallDock-H5ABOXNR.js.map} +1 -1
- package/dist/{ConnectedCallDock-ZRSZYSLO.cjs → ConnectedCallDock-XF56C2JA.cjs} +22 -22
- package/dist/{ConnectedCallDock-ZRSZYSLO.cjs.map → ConnectedCallDock-XF56C2JA.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-XK2RPNO6.cjs → ConnectedCallRoom-EEI2ZVTS.cjs} +14 -14
- package/dist/{ConnectedCallRoom-XK2RPNO6.cjs.map → ConnectedCallRoom-EEI2ZVTS.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-S7DO2MP6.js → ConnectedCallRoom-N6DUEV4S.js} +13 -13
- package/dist/{ConnectedCallRoom-S7DO2MP6.js.map → ConnectedCallRoom-N6DUEV4S.js.map} +1 -1
- package/dist/{ConnectedMailInviteCard-YYPLRL6G.js → ConnectedMailInviteCard-2TXUPVV7.js} +4 -4
- package/dist/{ConnectedMailInviteCard-YYPLRL6G.js.map → ConnectedMailInviteCard-2TXUPVV7.js.map} +1 -1
- package/dist/{ConnectedMailInviteCard-OBDYWUFM.cjs → ConnectedMailInviteCard-RSNELYZX.cjs} +5 -5
- package/dist/{ConnectedMailInviteCard-OBDYWUFM.cjs.map → ConnectedMailInviteCard-RSNELYZX.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-2RIERXLW.js → ConnectedNativeDocxComparison-P6GG3ODF.js} +18 -18
- package/dist/ConnectedNativeDocxComparison-P6GG3ODF.js.map +1 -0
- package/dist/{ConnectedNativeDocxComparison-46C7LYGT.cjs → ConnectedNativeDocxComparison-QHAV3K7N.cjs} +19 -19
- package/dist/ConnectedNativeDocxComparison-QHAV3K7N.cjs.map +1 -0
- package/dist/{ConnectedNativeDocxEditor-6XMB2XT7.cjs → ConnectedNativeDocxEditor-6HQD3MHT.cjs} +19 -19
- package/dist/ConnectedNativeDocxEditor-6HQD3MHT.cjs.map +1 -0
- package/dist/{ConnectedNativeDocxEditor-K6X63CPL.js → ConnectedNativeDocxEditor-CWDRJHXN.js} +17 -17
- package/dist/ConnectedNativeDocxEditor-CWDRJHXN.js.map +1 -0
- package/dist/{ConnectedProductionSetDialog-JXQLGDIH.js → ConnectedProductionSetDialog-2SM3ZNBF.js} +3 -3
- package/dist/{ConnectedProductionSetDialog-JXQLGDIH.js.map → ConnectedProductionSetDialog-2SM3ZNBF.js.map} +1 -1
- package/dist/{ConnectedProductionSetDialog-T3Q32XPJ.cjs → ConnectedProductionSetDialog-XNGMUGB6.cjs} +3 -3
- package/dist/{ConnectedProductionSetDialog-T3Q32XPJ.cjs.map → ConnectedProductionSetDialog-XNGMUGB6.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-6UMLSR3G.js → ConnectedStreamedWordArtifact-4SU4FVZE.js} +18 -18
- package/dist/ConnectedStreamedWordArtifact-4SU4FVZE.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-GFFLCGF7.cjs → ConnectedStreamedWordArtifact-5V7VRTEY.cjs} +19 -19
- package/dist/ConnectedStreamedWordArtifact-5V7VRTEY.cjs.map +1 -0
- package/dist/{DocumentReviewCard-SAKLHM4Y.js → DocumentReviewCard-LP33IGEL.js} +18 -18
- package/dist/{DocumentReviewCard-SAKLHM4Y.js.map → DocumentReviewCard-LP33IGEL.js.map} +1 -1
- package/dist/{DocumentReviewCard-XGYMO5YS.cjs → DocumentReviewCard-QV3CM7YP.cjs} +23 -23
- package/dist/{DocumentReviewCard-XGYMO5YS.cjs.map → DocumentReviewCard-QV3CM7YP.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-HNBRY7RQ.js → FilesViewerDialog-FZYXO3MS.js} +29 -29
- package/dist/{FilesViewerDialog-HNBRY7RQ.js.map → FilesViewerDialog-FZYXO3MS.js.map} +1 -1
- package/dist/{FilesViewerDialog-3C6JUMVS.cjs → FilesViewerDialog-JKNA25Q3.cjs} +31 -31
- package/dist/{FilesViewerDialog-3C6JUMVS.cjs.map → FilesViewerDialog-JKNA25Q3.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-DFN4WGRI.js → WorkspaceTableView-IFXCT6AJ.js} +10 -10
- package/dist/{WorkspaceTableView-DFN4WGRI.js.map → WorkspaceTableView-IFXCT6AJ.js.map} +1 -1
- package/dist/{WorkspaceTableView-UOP3EB2F.cjs → WorkspaceTableView-PZVCHSOP.cjs} +12 -12
- package/dist/{WorkspaceTableView-UOP3EB2F.cjs.map → WorkspaceTableView-PZVCHSOP.cjs.map} +1 -1
- package/dist/agents/index.cjs +353 -353
- package/dist/agents/index.js +14 -14
- package/dist/calendar/index.cjs +116 -116
- package/dist/calendar/index.js +1 -1
- package/dist/calls/index.cjs +154 -154
- package/dist/calls/index.js +13 -13
- package/dist/chat/index.cjs +18 -18
- package/dist/chat/index.js +2 -2
- package/dist/{chunk-B7RAN4DM.js → chunk-26RAAEFP.js} +3 -3
- package/dist/{chunk-B7RAN4DM.js.map → chunk-26RAAEFP.js.map} +1 -1
- package/dist/{chunk-GUGSUCIK.js → chunk-2A5QNDV2.js} +3 -3
- package/dist/{chunk-GUGSUCIK.js.map → chunk-2A5QNDV2.js.map} +1 -1
- package/dist/{chunk-WWMVVAA5.js → chunk-2AEWXS4X.js} +8 -8
- package/dist/{chunk-WWMVVAA5.js.map → chunk-2AEWXS4X.js.map} +1 -1
- package/dist/{chunk-HMS3GRMI.cjs → chunk-2Q7LETQX.cjs} +6 -6
- package/dist/{chunk-HMS3GRMI.cjs.map → chunk-2Q7LETQX.cjs.map} +1 -1
- package/dist/{chunk-OZS7THEB.js → chunk-2RDH5PVJ.js} +3 -3
- package/dist/{chunk-OZS7THEB.js.map → chunk-2RDH5PVJ.js.map} +1 -1
- package/dist/{chunk-6XOHTWDR.cjs → chunk-2XTU5H2U.cjs} +69 -69
- package/dist/{chunk-6XOHTWDR.cjs.map → chunk-2XTU5H2U.cjs.map} +1 -1
- package/dist/{chunk-JIFXHVO4.js → chunk-3BSFHBHY.js} +4 -4
- package/dist/{chunk-JIFXHVO4.js.map → chunk-3BSFHBHY.js.map} +1 -1
- package/dist/{chunk-SK6BAW7L.js → chunk-46IG4KY7.js} +103 -104
- package/dist/chunk-46IG4KY7.js.map +1 -0
- package/dist/{chunk-BLAWERIU.cjs → chunk-4P553YX2.cjs} +36 -36
- package/dist/{chunk-BLAWERIU.cjs.map → chunk-4P553YX2.cjs.map} +1 -1
- package/dist/{chunk-UAF2J7P7.cjs → chunk-5HEMXXHR.cjs} +103 -104
- package/dist/chunk-5HEMXXHR.cjs.map +1 -0
- package/dist/{chunk-A4MBPDLX.cjs → chunk-5S52732U.cjs} +6 -6
- package/dist/{chunk-A4MBPDLX.cjs.map → chunk-5S52732U.cjs.map} +1 -1
- package/dist/{chunk-4RFNQRUD.js → chunk-5SUIQS75.js} +16 -16
- package/dist/{chunk-4RFNQRUD.js.map → chunk-5SUIQS75.js.map} +1 -1
- package/dist/{chunk-Y2FPWPDB.js → chunk-5XB3H2TJ.js} +3 -3
- package/dist/{chunk-Y2FPWPDB.js.map → chunk-5XB3H2TJ.js.map} +1 -1
- package/dist/{chunk-NZQZ2HFU.cjs → chunk-64KZM3RZ.cjs} +3 -3
- package/dist/{chunk-NZQZ2HFU.cjs.map → chunk-64KZM3RZ.cjs.map} +1 -1
- package/dist/{chunk-YIJ4MFYM.js → chunk-6U6IY7DB.js} +3 -3
- package/dist/{chunk-YIJ4MFYM.js.map → chunk-6U6IY7DB.js.map} +1 -1
- package/dist/{chunk-K6UKLIRR.js → chunk-AS3HX7LL.js} +3 -3
- package/dist/{chunk-K6UKLIRR.js.map → chunk-AS3HX7LL.js.map} +1 -1
- package/dist/{chunk-LBRJA4ZJ.cjs → chunk-AZVKR4JO.cjs} +3 -3
- package/dist/{chunk-LBRJA4ZJ.cjs.map → chunk-AZVKR4JO.cjs.map} +1 -1
- package/dist/{chunk-RIBQCTBQ.js → chunk-B2NHC2KC.js} +3 -3
- package/dist/{chunk-RIBQCTBQ.js.map → chunk-B2NHC2KC.js.map} +1 -1
- package/dist/{chunk-IXA534S4.js → chunk-BCYFZIG6.js} +13 -13
- package/dist/{chunk-IXA534S4.js.map → chunk-BCYFZIG6.js.map} +1 -1
- package/dist/{chunk-VJLW3UPL.cjs → chunk-BDTPWXUW.cjs} +7 -7
- package/dist/{chunk-VJLW3UPL.cjs.map → chunk-BDTPWXUW.cjs.map} +1 -1
- package/dist/{chunk-EXZPKMMP.js → chunk-BSTVTI5G.js} +14 -14
- package/dist/{chunk-EXZPKMMP.js.map → chunk-BSTVTI5G.js.map} +1 -1
- package/dist/{chunk-OTODKLR3.cjs → chunk-C5CWKZ5D.cjs} +3 -3
- package/dist/{chunk-OTODKLR3.cjs.map → chunk-C5CWKZ5D.cjs.map} +1 -1
- package/dist/{chunk-LPGBRMYS.js → chunk-CHQMVIHR.js} +36 -36
- package/dist/chunk-CHQMVIHR.js.map +1 -0
- package/dist/{chunk-Z6NX57CU.js → chunk-CPOFZYKH.js} +4 -4
- package/dist/{chunk-Z6NX57CU.js.map → chunk-CPOFZYKH.js.map} +1 -1
- package/dist/{chunk-Q4ORI364.cjs → chunk-DBGN4M4F.cjs} +19 -19
- package/dist/{chunk-Q4ORI364.cjs.map → chunk-DBGN4M4F.cjs.map} +1 -1
- package/dist/{chunk-3TECBO75.cjs → chunk-DCYVHUSU.cjs} +54 -54
- package/dist/{chunk-3TECBO75.cjs.map → chunk-DCYVHUSU.cjs.map} +1 -1
- package/dist/{chunk-PZXEXHKB.cjs → chunk-DIE5ENQC.cjs} +28 -28
- package/dist/{chunk-PZXEXHKB.cjs.map → chunk-DIE5ENQC.cjs.map} +1 -1
- package/dist/{chunk-TVLY7FTU.js → chunk-DW7LSBIW.js} +3 -3
- package/dist/{chunk-TVLY7FTU.js.map → chunk-DW7LSBIW.js.map} +1 -1
- package/dist/{chunk-RCOJ7JG5.cjs → chunk-EBNY3RTL.cjs} +4 -4
- package/dist/{chunk-RCOJ7JG5.cjs.map → chunk-EBNY3RTL.cjs.map} +1 -1
- package/dist/{chunk-FEBLYTME.js → chunk-ER36PSS7.js} +5 -5
- package/dist/{chunk-FEBLYTME.js.map → chunk-ER36PSS7.js.map} +1 -1
- package/dist/{chunk-VIRQYEFL.cjs → chunk-F5T4W2R2.cjs} +140 -140
- package/dist/chunk-F5T4W2R2.cjs.map +1 -0
- package/dist/{chunk-RQNNHO44.cjs → chunk-GE2O6S44.cjs} +4 -4
- package/dist/{chunk-RQNNHO44.cjs.map → chunk-GE2O6S44.cjs.map} +1 -1
- package/dist/{chunk-4UMSQ67B.js → chunk-H57PBOFE.js} +3 -3
- package/dist/{chunk-4UMSQ67B.js.map → chunk-H57PBOFE.js.map} +1 -1
- package/dist/{chunk-7OPOPYV6.cjs → chunk-H5OLHP2U.cjs} +3 -3
- package/dist/{chunk-7OPOPYV6.cjs.map → chunk-H5OLHP2U.cjs.map} +1 -1
- package/dist/{chunk-VK5Q5JXU.cjs → chunk-HDPT7D6F.cjs} +3 -3
- package/dist/{chunk-VK5Q5JXU.cjs.map → chunk-HDPT7D6F.cjs.map} +1 -1
- package/dist/{chunk-HU7MB33Q.js → chunk-HLVLPDDD.js} +3 -3
- package/dist/{chunk-HU7MB33Q.js.map → chunk-HLVLPDDD.js.map} +1 -1
- package/dist/{chunk-CLPDKHSP.cjs → chunk-HYDIQEDT.cjs} +12 -12
- package/dist/{chunk-CLPDKHSP.cjs.map → chunk-HYDIQEDT.cjs.map} +1 -1
- package/dist/{chunk-HUE76NAI.cjs → chunk-I6SPGHFY.cjs} +2 -2
- package/dist/{chunk-HUE76NAI.cjs.map → chunk-I6SPGHFY.cjs.map} +1 -1
- package/dist/{chunk-M6XUGXCY.cjs → chunk-IHJ7BEI5.cjs} +741 -741
- package/dist/chunk-IHJ7BEI5.cjs.map +1 -0
- package/dist/{chunk-WLQAD6ZY.js → chunk-IL6OWGAU.js} +744 -744
- package/dist/chunk-IL6OWGAU.js.map +1 -0
- package/dist/{chunk-KXRGVY3M.cjs → chunk-ILLWGL7Q.cjs} +4 -4
- package/dist/{chunk-KXRGVY3M.cjs.map → chunk-ILLWGL7Q.cjs.map} +1 -1
- package/dist/{chunk-WFNEZT7S.cjs → chunk-IOCEKN44.cjs} +4 -4
- package/dist/{chunk-WFNEZT7S.cjs.map → chunk-IOCEKN44.cjs.map} +1 -1
- package/dist/{chunk-MFEJKCCZ.js → chunk-JGA2JJEL.js} +3 -3
- package/dist/{chunk-MFEJKCCZ.js.map → chunk-JGA2JJEL.js.map} +1 -1
- package/dist/{chunk-UCQ3VXRB.js → chunk-JM7Z3QNS.js} +5 -5
- package/dist/{chunk-UCQ3VXRB.js.map → chunk-JM7Z3QNS.js.map} +1 -1
- package/dist/{chunk-3KNKAZ5D.cjs → chunk-K3C4WECV.cjs} +5 -5
- package/dist/{chunk-3KNKAZ5D.cjs.map → chunk-K3C4WECV.cjs.map} +1 -1
- package/dist/{chunk-DGG35TPO.cjs → chunk-KB2FH26M.cjs} +4 -4
- package/dist/{chunk-DGG35TPO.cjs.map → chunk-KB2FH26M.cjs.map} +1 -1
- package/dist/{chunk-MB3IQLNN.cjs → chunk-L4USMBHU.cjs} +18 -18
- package/dist/chunk-L4USMBHU.cjs.map +1 -0
- package/dist/{chunk-XIEX3HO3.js → chunk-L4YGZJYR.js} +3 -3
- package/dist/{chunk-XIEX3HO3.js.map → chunk-L4YGZJYR.js.map} +1 -1
- package/dist/{chunk-KNC77LZZ.cjs → chunk-LMOLE5PS.cjs} +3 -3
- package/dist/{chunk-KNC77LZZ.cjs.map → chunk-LMOLE5PS.cjs.map} +1 -1
- package/dist/{chunk-PYLG3M6G.js → chunk-LTRFQ2IC.js} +2 -2
- package/dist/{chunk-PYLG3M6G.js.map → chunk-LTRFQ2IC.js.map} +1 -1
- package/dist/{chunk-636KUL53.js → chunk-NSJUMOLN.js} +5 -5
- package/dist/{chunk-636KUL53.js.map → chunk-NSJUMOLN.js.map} +1 -1
- package/dist/{chunk-7SJXYEZI.cjs → chunk-OAIOOVFN.cjs} +36 -36
- package/dist/chunk-OAIOOVFN.cjs.map +1 -0
- package/dist/{chunk-FKPFKSDT.js → chunk-PA2I7GLY.js} +6 -6
- package/dist/{chunk-FKPFKSDT.js.map → chunk-PA2I7GLY.js.map} +1 -1
- package/dist/{chunk-4KARJ4CC.js → chunk-PCAWLVHE.js} +3 -3
- package/dist/{chunk-4KARJ4CC.js.map → chunk-PCAWLVHE.js.map} +1 -1
- package/dist/{chunk-7QDLONHA.js → chunk-PPFTNP6J.js} +11 -11
- package/dist/chunk-PPFTNP6J.js.map +1 -0
- package/dist/{chunk-2FPBFLOX.cjs → chunk-Q4X5RK4A.cjs} +9 -3
- package/dist/chunk-Q4X5RK4A.cjs.map +1 -0
- package/dist/{chunk-4VUKYB32.cjs → chunk-Q5TOUT2C.cjs} +4 -4
- package/dist/{chunk-4VUKYB32.cjs.map → chunk-Q5TOUT2C.cjs.map} +1 -1
- package/dist/{chunk-DU3H4WC6.cjs → chunk-QIEUKIBH.cjs} +4 -4
- package/dist/{chunk-DU3H4WC6.cjs.map → chunk-QIEUKIBH.cjs.map} +1 -1
- package/dist/{chunk-5YBH5CQD.cjs → chunk-QJNHVQUQ.cjs} +26 -26
- package/dist/{chunk-5YBH5CQD.cjs.map → chunk-QJNHVQUQ.cjs.map} +1 -1
- package/dist/{chunk-C33VIPE2.js → chunk-QZ6XGYGW.js} +9 -3
- package/dist/chunk-QZ6XGYGW.js.map +1 -0
- package/dist/{chunk-YRVE6RX5.cjs → chunk-RB6MAAS7.cjs} +4 -4
- package/dist/{chunk-YRVE6RX5.cjs.map → chunk-RB6MAAS7.cjs.map} +1 -1
- package/dist/{chunk-KPD7WAXP.js → chunk-S6QBLVPP.js} +3 -3
- package/dist/{chunk-KPD7WAXP.js.map → chunk-S6QBLVPP.js.map} +1 -1
- package/dist/{chunk-TIQZ7CXZ.js → chunk-SOLSDXOZ.js} +83 -83
- package/dist/chunk-SOLSDXOZ.js.map +1 -0
- package/dist/{chunk-ZZE3ORJS.js → chunk-SOZIHPO2.js} +3 -3
- package/dist/{chunk-ZZE3ORJS.js.map → chunk-SOZIHPO2.js.map} +1 -1
- package/dist/{chunk-TSP5JJ56.js → chunk-VUXWBUZ7.js} +11 -11
- package/dist/{chunk-TSP5JJ56.js.map → chunk-VUXWBUZ7.js.map} +1 -1
- package/dist/{chunk-NZ26UYEQ.cjs → chunk-VWX36C4Y.cjs} +67 -67
- package/dist/{chunk-NZ26UYEQ.cjs.map → chunk-VWX36C4Y.cjs.map} +1 -1
- package/dist/{chunk-YACOI5ZU.cjs → chunk-WA2U4G43.cjs} +62 -62
- package/dist/{chunk-YACOI5ZU.cjs.map → chunk-WA2U4G43.cjs.map} +1 -1
- package/dist/{chunk-PSJAFPMH.js → chunk-WLWZAS7J.js} +4 -4
- package/dist/{chunk-PSJAFPMH.js.map → chunk-WLWZAS7J.js.map} +1 -1
- package/dist/{chunk-GNKQVCMW.cjs → chunk-WVEYUH6C.cjs} +6 -6
- package/dist/{chunk-GNKQVCMW.cjs.map → chunk-WVEYUH6C.cjs.map} +1 -1
- package/dist/{chunk-2F65OOU3.js → chunk-YB2P5Y52.js} +7 -7
- package/dist/{chunk-2F65OOU3.js.map → chunk-YB2P5Y52.js.map} +1 -1
- package/dist/collaboration/index.cjs +1 -1
- package/dist/collaboration/index.js +1 -1
- package/dist/connect/docx.cjs +22 -22
- package/dist/connect/docx.js +18 -18
- package/dist/connect/index.cjs +1176 -1176
- package/dist/connect/index.js +87 -87
- package/dist/connect/viewer.cjs +28 -28
- package/dist/connect/viewer.js +27 -27
- package/dist/dashboards/index.cjs +1 -1
- package/dist/dashboards/index.js +1 -1
- package/dist/embed/index.cjs +42 -42
- package/dist/embed/index.js +36 -36
- package/dist/facts/index.cjs +44 -44
- package/dist/facts/index.js +3 -3
- package/dist/files/index.cjs +226 -226
- package/dist/files/index.js +5 -5
- package/dist/index.cjs +1631 -1631
- package/dist/index.js +47 -47
- package/dist/settings/index.cjs +153 -153
- package/dist/settings/index.js +4 -4
- package/dist/shell/Sidebar.d.ts +4 -2
- package/dist/shell/index.cjs +89 -89
- package/dist/shell/index.js +10 -10
- package/dist/shell/use-sidebar-controller.d.ts +3 -3
- package/dist/studio/index.cjs +18 -18
- package/dist/studio/index.js +15 -15
- package/dist/workflow-canvas/index.cjs +66 -66
- package/dist/workflow-canvas/index.js +42 -42
- package/dist/workspaces/index.cjs +20 -20
- package/dist/workspaces/index.js +3 -3
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedNativeDocxComparison-2RIERXLW.js.map +0 -1
- package/dist/ConnectedNativeDocxComparison-46C7LYGT.cjs.map +0 -1
- package/dist/ConnectedNativeDocxEditor-6XMB2XT7.cjs.map +0 -1
- package/dist/ConnectedNativeDocxEditor-K6X63CPL.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-6UMLSR3G.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-GFFLCGF7.cjs.map +0 -1
- package/dist/chunk-2FPBFLOX.cjs.map +0 -1
- package/dist/chunk-7QDLONHA.js.map +0 -1
- package/dist/chunk-7SJXYEZI.cjs.map +0 -1
- package/dist/chunk-C33VIPE2.js.map +0 -1
- package/dist/chunk-LPGBRMYS.js.map +0 -1
- package/dist/chunk-M6XUGXCY.cjs.map +0 -1
- package/dist/chunk-MB3IQLNN.cjs.map +0 -1
- package/dist/chunk-SK6BAW7L.js.map +0 -1
- package/dist/chunk-TIQZ7CXZ.js.map +0 -1
- package/dist/chunk-UAF2J7P7.cjs.map +0 -1
- package/dist/chunk-VIRQYEFL.cjs.map +0 -1
- package/dist/chunk-WLQAD6ZY.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/calendar/labels.ts","../src/calendar/colors.ts","../src/calendar/ui.tsx","../src/calendar/grid-model.ts","../src/calendar/CalendarGrid.tsx","../src/calendar/MiniMonth.tsx","../src/calendar/CalendarList.tsx","../src/calendar/conference.ts","../src/calendar/draft.ts","../src/calendar/recurrence.ts","../src/calendar/recurrence-labels.ts","../src/calendar/RecurrenceEditor.tsx","../src/calendar/format.ts","../src/calendar/TimeZonePicker.tsx","../src/calendar/reminders.ts","../src/calendar/EventAttachments.tsx","../src/calendar/EventEditor.tsx","../src/calendar/EventDetails.tsx","../src/calendar/ScopeDialog.tsx","../src/calendar/scheduling.ts","../src/calendar/SchedulingAssistant.tsx","../src/calendar/CalendarSettingsForm.tsx","../src/calendar/print-layout.ts","../src/calendar/CalendarPrint.tsx","../src/calendar/printCalendar.tsx","../src/calendar/booking-slots.ts","../src/calendar/api-mapping.ts","../src/calendar/requests.ts","../src/calendar/freebusy.ts","../src/calendar/settings-value.ts","../src/calendar/ics.ts","../src/calendar/feeds.ts","../src/calendar/errors.ts","../src/calendar/booking-form.ts","../src/calendar/WeeklyHoursEditor.tsx","../src/calendar/room-window.ts","../src/calendar/CalendarFormDialog.tsx","../src/calendar/ProposeTimeDialog.tsx"],"names":["forwardRef","NativeSelect","jsx","cn","jsxs","NamedTimeZoneImpl","wallArrayOffset","epochToWallArray","createPlugin","utcToDate","addDays","Lightbulb","Workflow","ListTodo","Fragment","Lock","Repeat","Video","MapPin","useMemo","safeZone","isValidTimeZone","useRef","useState","useCallback","useEffect","end","convertWall","utcToTime","zoneOffsetLabel","formatInZone","h","dayGridPlugin","timeGridPlugin","listPlugin","interactionPlugin","multiMonthPlugin","Button","ChevronLeft","ChevronRight","zoneCity","FullCalendar","todayInZone","startOfWeek","formatPlainDate","addMonths","isoWeekNumber","Plus","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuItem","EllipsisVertical","DropdownMenuLabel","DropdownMenuSeparator","wallToEpochMs","start","diffDays","utcToWall","Temporal","wallToUtc","Input","a","listTimeZones","zoneOffsetMinutes","Popover","PopoverTrigger","Globe","ChevronDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","Check","minutes","document","Paperclip","DocumentPicker","X","useId","Clock","Switch","CalendarDays","Users","TextAlignStart","Textarea","Bell","Tag","Palette","Trash2","Pencil","CircleCheck","CircleX","DoorOpen","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","User","Sparkles","from","dayOfWeekSun0","detectTimeZone","createRoot","flushSync","timedSpec","DialogFooter"],"mappings":"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","file":"chunk-HUE76NAI.cjs","sourcesContent":["import type { CalendarLabels } from './types'\n\n/** Every fixed string of the calendar block. Pass `labels` to any component to override. */\nexport const CALENDAR_DEFAULT_LABELS: CalendarLabels = {\n today: 'Today',\n view: 'View',\n previous: 'Previous',\n next: 'Next',\n day: 'Day',\n week: 'Week',\n workWeek: 'Work week',\n month: 'Month',\n agenda: 'Agenda',\n year: 'Year',\n allDay: 'All day',\n busy: 'Busy',\n noTitle: '(No title)',\n noEvents: 'No events',\n weekAbbrev: 'W',\n more: 'more',\n newEvent: 'New event',\n myCalendars: 'My calendars',\n sharedCalendars: 'Shared with me',\n workspaceCalendars: 'Workspace calendars',\n subscribedCalendars: 'Subscribed',\n overlays: 'Also show',\n facts: 'Dated facts',\n workflows: 'Workflows',\n tasks: 'Tasks',\n createCalendar: 'New calendar',\n editCalendar: 'Settings and sharing',\n importCalendar: 'Import .ics',\n exportCalendar: 'Export .ics',\n deleteCalendar: 'Delete calendar',\n locked: 'Locked calendar',\n showCalendar: 'Show',\n hideCalendar: 'Hide',\n calendarColor: 'Colour',\n title: 'Title',\n titlePlaceholder: 'Add a title',\n calendar: 'Calendar',\n start: 'Start',\n end: 'End',\n startTime: 'Start time',\n endTime: 'End time',\n arbiCall: 'ARBI call',\n arbiWebinar: 'ARBI webinar',\n startTimeZone: 'Start time zone',\n endTimeZone: 'End time zone',\n separateTimeZones: 'Time zones',\n repeat: 'Repeat',\n location: 'Location',\n description: 'Description',\n attendees: 'Guests',\n addAttendee: 'Add guests by email',\n required: 'Required',\n optional: 'Optional',\n showAs: 'Show as',\n sensitivity: 'Visibility',\n categories: 'Categories',\n addCategory: 'Add a category',\n color: 'Colour',\n defaultColor: 'Calendar colour',\n reminders: 'Reminders',\n addReminder: 'Add reminder',\n useDefaultReminders: 'Use calendar default reminders',\n conference: 'Audio or video call',\n addArbiCall: 'Add ARBI call',\n addArbiWebinar: 'Add ARBI webinar',\n webinar: 'Webinar',\n webinarLinkOnSave: 'The link is created when you save',\n webinarRole: 'Webinar role',\n cohost: 'Co-host',\n panelist: 'Panelist',\n webinarAttendee: 'Attendee',\n joinWebinar: 'Join webinar',\n addMeetingLink: 'Add call link or dial-in',\n meetingLinkPlaceholder: 'https://… or phone number',\n removeConference: 'Remove call',\n attachments: 'Attachments',\n addAttachment: 'Add link',\n attachmentUrlPlaceholder: 'https://…',\n attachmentTitlePlaceholder: 'Title (optional)',\n status: 'Status',\n save: 'Save',\n saving: 'Saving…',\n cancel: 'Cancel',\n delete: 'Delete',\n edit: 'Edit',\n remove: 'Remove',\n createTitle: 'New event',\n editTitle: 'Edit event',\n minutes: 'minutes',\n hours: 'hours',\n days: 'days',\n weeks: 'weeks',\n beforeStart: 'before',\n popup: 'Notification',\n email: 'Email',\n atStart: 'At time of event',\n free: 'Free',\n tentative: 'Tentative',\n oof: 'Out of office',\n workingElsewhere: 'Working elsewhere',\n normal: 'Default visibility',\n private: 'Private',\n confidential: 'Confidential',\n confirmed: 'Confirmed',\n cancelled: 'Cancelled',\n join: 'Join',\n openMeetingChat: 'Open meeting chat',\n accept: 'Yes',\n decline: 'No',\n maybe: 'Maybe',\n going: 'Going?',\n organizer: 'Organiser',\n needsAction: 'Awaiting reply',\n accepted: 'Accepted',\n declined: 'Declined',\n delegated: 'Delegated',\n recurring: 'Repeats',\n scopeEditTitle: 'Edit recurring event',\n scopeDeleteTitle: 'Delete recurring event',\n scopeThis: 'This event',\n scopeFollowing: 'This and following events',\n scopeAll: 'All events',\n settingsTitle: 'Calendar settings',\n timeZone: 'Time zone',\n secondaryTimeZone: 'Secondary time zone',\n none: 'None',\n weekStart: 'Week starts on',\n workingHours: 'Working hours',\n defaultView: 'Default view',\n defaultDuration: 'Default event length',\n defaultCalendar: 'Default calendar',\n showDeclined: 'Show declined events',\n showWeekNumbers: 'Show week numbers',\n autoAddInvitations: 'Add invitations to my calendar',\n autoAddAll: 'From everyone',\n autoAddKnown: 'Only from people I know',\n autoAddNone: 'Only after I respond',\n declineMessage: 'Default decline message',\n searchTimeZones: 'Search time zones',\n invalidRange: 'The end must be after the start.',\n titleRequired: 'Add a title.',\n removeFromCalendar: 'Remove from calendar',\n proposeNewTime: 'Propose new time',\n scopeRespondTitle: 'Respond to a recurring event',\n send: 'Send',\n focusTime: 'Focus time',\n autoDecline: 'Decline new invitations',\n declineMessagePlaceholder: 'Message for declined invitations (optional)',\n schedulingAssistant: 'Scheduling assistant',\n findATime: 'Find a time',\n findingTimes: 'Finding times…',\n noSuggestions: 'No free times found in this range.',\n everyoneFree: 'Everyone available',\n unavailableCount: 'unavailable',\n unknownAvailability: 'Availability not shared',\n outsideWorkingHours: 'Outside working hours',\n rooms: 'Rooms',\n room: 'Room',\n you: 'You',\n addCalendar: 'Add calendar',\n subscribeFromUrl: 'Subscribe from URL',\n addHolidays: 'Holidays',\n importIcs: 'Import .ics file',\n shareCalendar: 'Share…',\n refreshCalendar: 'Refresh',\n publishTo: 'Publish to…',\n suggestions: 'Suggestions',\n}\n\nexport const mergeLabels = (labels?: Partial<CalendarLabels>): CalendarLabels => ({\n ...CALENDAR_DEFAULT_LABELS,\n ...labels,\n})\n","/** Calendar colour palette and readable text colour for a background. */\nexport const CALENDAR_COLORS = [\n '#3b82f6',\n '#0ea5e9',\n '#14b8a6',\n '#22c55e',\n '#84cc16',\n '#eab308',\n '#f97316',\n '#ef4444',\n '#ec4899',\n '#a855f7',\n '#6366f1',\n '#64748b',\n]\n\n/** Black or white text for a hex background (WCAG relative luminance). */\nexport function contrastText(hex: string): string {\n const m = /^#?([0-9a-f]{6})$/i.exec(hex.trim())\n if (!m) return '#ffffff'\n const n = parseInt(m[1], 16)\n const ch = [(n >> 16) & 255, (n >> 8) & 255, n & 255].map((v) => {\n const c = v / 255\n return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4\n })\n const lum = 0.2126 * ch[0] + 0.7152 * ch[1] + 0.0722 * ch[2]\n // Contrast against white vs. near-black; pick the larger.\n return 1.05 / (lum + 0.05) >= (lum + 0.05) / 0.05 ? '#ffffff' : '#111827'\n}\n","/** Small form primitives shared by the calendar forms (native controls: work on phones, easy to test). */\nimport { forwardRef, type ReactNode, type SelectHTMLAttributes } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { CALENDAR_COLORS } from './colors'\n\nexport const NativeSelect = forwardRef<HTMLSelectElement, SelectHTMLAttributes<HTMLSelectElement>>(\n function NativeSelect({ className, children, ...props }, ref) {\n return (\n <select\n ref={ref}\n className={cn(\n 'h-9 rounded-md border border-input bg-background px-2 text-sm text-foreground shadow-sm',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50',\n className\n )}\n {...props}\n >\n {children}\n </select>\n )\n }\n)\n\nexport function FieldRow({\n icon,\n label,\n children,\n className,\n}: {\n icon?: ReactNode\n label?: ReactNode\n children: ReactNode\n className?: string\n}) {\n return (\n <div className={cn('flex items-start gap-3', className)}>\n <div\n className=\"mt-2 flex h-5 w-5 shrink-0 items-center justify-center text-muted-foreground\"\n aria-hidden\n >\n {icon}\n </div>\n <div className=\"min-w-0 flex-1 space-y-1.5\">\n {label && <div className=\"text-xs font-medium text-muted-foreground\">{label}</div>}\n {children}\n </div>\n </div>\n )\n}\n\nexport function ColorSwatches({\n value,\n onChange,\n allowNone,\n noneLabel,\n testIdPrefix,\n}: {\n value: string | null | undefined\n onChange: (color: string | null) => void\n allowNone?: boolean\n noneLabel?: string\n testIdPrefix?: string\n}) {\n return (\n <div className=\"flex flex-wrap items-center gap-1.5\" role=\"radiogroup\">\n {allowNone && (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={!value}\n aria-label={noneLabel}\n title={noneLabel}\n onClick={() => onChange(null)}\n className={cn(\n 'h-6 rounded-full border border-border px-2 text-xs text-muted-foreground',\n !value && 'ring-2 ring-ring ring-offset-1 ring-offset-background'\n )}\n >\n {noneLabel}\n </button>\n )}\n {CALENDAR_COLORS.map((c) => (\n <button\n key={c}\n type=\"button\"\n role=\"radio\"\n aria-checked={value?.toLowerCase() === c}\n aria-label={c}\n title={c}\n data-testid={testIdPrefix ? `${testIdPrefix}-${c.slice(1)}` : undefined}\n onClick={() => onChange(c)}\n className={cn(\n 'h-6 w-6 rounded-full border border-black/10',\n value?.toLowerCase() === c && 'ring-2 ring-ring ring-offset-1 ring-offset-background'\n )}\n style={{ backgroundColor: c }}\n />\n ))}\n </div>\n )\n}\n","/**\n * The model side of CalendarGrid: the Temporal zone plugin for FullCalendar, view mapping, working\n * hours → business hours, and GridEvent → FullCalendar EventInput.\n */\nimport { createPlugin } from '@fullcalendar/core'\nimport type { EventInput, PluginDef } from '@fullcalendar/core'\nimport { NamedTimeZoneImpl } from '@fullcalendar/core/internal'\nimport type { CalendarLabels, CalendarViewKind, GridEvent, WorkingHoursSpec } from './types'\nimport { addDays, epochToWallArray, utcToDate, wallArrayOffset } from './zone'\n\n// ── zone plugin ─────────────────────────────────────────────────────────────────\n\nlet temporalZonePlugin: PluginDef | null = null\n\n/** FullCalendar plugin resolving named zones with Temporal (built once, on first render). */\nexport function getTemporalTimeZonePlugin(): PluginDef {\n if (!temporalZonePlugin) {\n class TemporalNamedTimeZone extends NamedTimeZoneImpl {\n offsetForArray(a: number[]): number {\n return wallArrayOffset(a, this.timeZoneName)\n }\n timestampToArray(ms: number): number[] {\n return epochToWallArray(ms, this.timeZoneName)\n }\n }\n temporalZonePlugin = createPlugin({\n name: 'arbi-temporal-timezone',\n namedTimeZonedImpl: TemporalNamedTimeZone,\n })\n }\n return temporalZonePlugin\n}\n\n// ── views ───────────────────────────────────────────────────────────────────────\n\nexport const FC_VIEW: Record<CalendarViewKind, string> = {\n day: 'timeGridDay',\n week: 'timeGridWeek',\n work_week: 'arbiWorkWeek',\n month: 'dayGridMonth',\n agenda: 'arbiAgenda',\n year: 'multiMonthYear',\n}\n\nexport const VIEW_OF_FC: Record<string, CalendarViewKind> = Object.fromEntries(\n Object.entries(FC_VIEW).map(([k, v]) => [v, k as CalendarViewKind])\n)\n\nexport const VIEW_ORDER: CalendarViewKind[] = [\n 'day',\n 'work_week',\n 'week',\n 'month',\n 'agenda',\n 'year',\n]\nexport const NARROW_VIEWS: CalendarViewKind[] = ['day', 'month', 'agenda']\n\n/** Width (px) under which the grid switches to its phone layout. */\nexport const CALENDAR_NARROW_WIDTH = 640\n\n/** The view a narrow (phone) screen shows for the requested one: wide time grids collapse to a day. */\nexport function effectiveCalendarView(view: CalendarViewKind, narrow: boolean): CalendarViewKind {\n if (!narrow) return view\n return view === 'week' || view === 'work_week' || view === 'year' ? 'day' : view\n}\n\nexport const viewLabel = (v: CalendarViewKind, l: CalendarLabels): string =>\n ({\n day: l.day,\n week: l.week,\n work_week: l.workWeek,\n month: l.month,\n agenda: l.agenda,\n year: l.year,\n })[v]\n\n/** FullCalendar business hours from working hours (0 = Monday → FC 1). */\nexport function toBusinessHours(hours: WorkingHoursSpec[] | undefined) {\n if (!hours?.length) return false as const\n return hours.map((h) => ({\n daysOfWeek: [(h.day + 1) % 7],\n startTime: h.start,\n endTime: h.end === '24:00' ? '24:00:00' : h.end,\n }))\n}\n\n/** Days (FC: 0 = Sunday) the work-week view hides. */\nexport function workWeekHiddenDays(hours: WorkingHoursSpec[] | undefined): number[] {\n const shown = new Set((hours ?? []).map((h) => (h.day + 1) % 7))\n if (shown.size === 0) return [0, 6]\n return [0, 1, 2, 3, 4, 5, 6].filter((d) => !shown.has(d))\n}\n\n// ── events ──────────────────────────────────────────────────────────────────────\n\n/** CSS classes describing an event's state (also used by tests and hosts). */\nexport function eventStateClasses(e: GridEvent): string[] {\n const out = ['arbi-cal-event', `arbi-cal-layer-${e.layer}`]\n if (e.layer !== 'event') out.push('arbi-cal-overlay')\n if (e.status === 'cancelled') out.push('arbi-cal-cancelled')\n if (e.myPartstat === 'declined') out.push('arbi-cal-declined')\n else if (e.myPartstat === 'needs_action') out.push('arbi-cal-needs-action')\n else if (e.myPartstat === 'tentative' || e.status === 'tentative' || e.showAs === 'tentative')\n out.push('arbi-cal-tentative')\n if (e.showAs === 'free') out.push('arbi-cal-free')\n if (e.showAs === 'oof') out.push('arbi-cal-oof')\n if (e.restricted) out.push('arbi-cal-restricted')\n return out\n}\n\nexport function toEventInput(e: GridEvent, zone: string): EventInput {\n const editable = e.editable && e.layer === 'event' && !e.restricted\n const base: EventInput = {\n id: e.instanceId,\n title: e.title,\n editable,\n startEditable: editable,\n durationEditable: editable,\n classNames: eventStateClasses(e),\n // The inner content paints the block (see calendar.css); the harness only carries the border\n // colour (list-view dot, needs-action outline).\n backgroundColor: 'transparent',\n borderColor: e.color,\n textColor: 'inherit',\n extendedProps: { grid: e },\n }\n if (e.allDay) {\n const start = e.startDate ?? utcToDate(e.startUtc, zone)\n const end = e.endDate ?? (e.endUtc ? utcToDate(e.endUtc, zone) : addDays(start, 1))\n return { ...base, allDay: true, start, end: end > start ? end : addDays(start, 1) }\n }\n return { ...base, allDay: false, start: e.startUtc, end: e.endUtc }\n}\n","/**\n * The calendar surface: day / week / work week / month / agenda / year over FullCalendar v6\n * (MIT standard plugins), rendered in an explicit IANA zone through a Temporal-backed\n * NamedTimeZoneImpl — never the browser's zone, never raw UTC components.\n *\n * Props in, callbacks out: the host owns the data, the view and the anchor date. Toolbar buttons\n * and keyboard shortcuts move the calendar and report through `onViewChange` / `onDateChange` /\n * `onRangeChange`; a changed `view` / `date` prop moves it back.\n */\nimport { useCallback, useEffect, useMemo, useRef, useState, type CSSProperties } from 'react'\nimport FullCalendar from '@fullcalendar/react'\nimport dayGridPlugin from '@fullcalendar/daygrid'\nimport timeGridPlugin from '@fullcalendar/timegrid'\nimport listPlugin from '@fullcalendar/list'\nimport interactionPlugin, { type EventResizeDoneArg } from '@fullcalendar/interaction'\nimport multiMonthPlugin from '@fullcalendar/multimonth'\nimport type {\n AllDayContentArg,\n CalendarApi,\n DateSelectArg,\n DatesSetArg,\n DayHeaderContentArg,\n EventApi,\n EventClickArg,\n EventContentArg,\n EventDropArg,\n SlotLabelContentArg,\n} from '@fullcalendar/core'\nimport {\n ChevronLeft,\n ChevronRight,\n Lightbulb,\n ListTodo,\n Lock,\n MapPin,\n Repeat,\n Video,\n Workflow,\n} from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport type { CalendarGridProps, CalendarLabels, CalendarViewKind, GridEvent } from './types'\nimport { mergeLabels } from './labels'\nimport { NativeSelect } from './ui'\nimport { contrastText } from './colors'\nimport {\n addDays,\n convertWall,\n formatInZone,\n isValidTimeZone,\n safeZone,\n utcToDate,\n utcToTime,\n zoneCity,\n zoneOffsetLabel,\n} from './zone'\nimport {\n CALENDAR_NARROW_WIDTH,\n effectiveCalendarView,\n FC_VIEW,\n getTemporalTimeZonePlugin,\n NARROW_VIEWS,\n toBusinessHours,\n toEventInput,\n VIEW_OF_FC,\n VIEW_ORDER,\n viewLabel,\n workWeekHiddenDays,\n} from './grid-model'\n\nconst LAYER_ICON = { facts: Lightbulb, workflows: Workflow, tasks: ListTodo } as const\n\nfunction EventBody({ arg, labels }: { arg: EventContentArg; labels: CalendarLabels }) {\n const g = arg.event.extendedProps.grid as GridEvent | undefined\n if (!g) return <span>{arg.event.title}</span>\n const title = g.restricted ? labels.busy : g.title.trim() || labels.noTitle\n const type = arg.view.type\n const dot = type === 'dayGridMonth' && !arg.event.allDay\n const list = type.startsWith('list') || type === 'arbiAgenda'\n const style = {\n '--arbi-cal-color': g.color,\n '--arbi-cal-fg': contrastText(g.color),\n } as CSSProperties\n const OverlayIcon = g.layer !== 'event' ? LAYER_ICON[g.layer] : null\n const icons = (\n <>\n {OverlayIcon && <OverlayIcon className=\"arbi-cal-icon\" aria-hidden />}\n {g.restricted && <Lock className=\"arbi-cal-icon\" aria-hidden />}\n {g.isRecurring && <Repeat className=\"arbi-cal-icon\" aria-label={labels.recurring} />}\n {g.hasConference && <Video className=\"arbi-cal-icon\" aria-hidden />}\n </>\n )\n if (list) {\n return (\n <div\n className=\"arbi-cal-list-item\"\n style={style}\n data-testid=\"calendar-event\"\n data-instance-id={g.instanceId}\n >\n <span className=\"arbi-cal-title\">{title}</span>\n {icons}\n {g.location && !g.restricted && (\n <span className=\"arbi-cal-location\">\n <MapPin className=\"arbi-cal-icon\" aria-hidden />\n {g.location}\n </span>\n )}\n </div>\n )\n }\n if (dot) {\n return (\n <div\n className=\"arbi-cal-dot-item\"\n style={style}\n data-testid=\"calendar-event\"\n data-instance-id={g.instanceId}\n >\n <span className=\"arbi-cal-dot\" aria-hidden />\n {arg.timeText && <span className=\"arbi-cal-time\">{arg.timeText}</span>}\n <span className=\"arbi-cal-title\">{title}</span>\n </div>\n )\n }\n return (\n <div\n className=\"arbi-cal-event-inner\"\n style={style}\n data-testid=\"calendar-event\"\n data-instance-id={g.instanceId}\n >\n <div className=\"arbi-cal-event-line\">\n <span className=\"arbi-cal-title\">{title}</span>\n {icons}\n </div>\n {!arg.event.allDay && arg.timeText && <div className=\"arbi-cal-time\">{arg.timeText}</div>}\n {!arg.event.allDay && g.location && !g.restricted && (\n <div className=\"arbi-cal-location\">{g.location}</div>\n )}\n </div>\n )\n}\n\nfunction isTypingTarget(t: EventTarget | null): boolean {\n if (!(t instanceof HTMLElement)) return false\n const tag = t.tagName\n return tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT' || t.isContentEditable\n}\n\n// ── component ───────────────────────────────────────────────────────────────────\n\nexport function CalendarGrid({\n events,\n view,\n date,\n timeZone,\n secondaryTimeZone,\n weekStart,\n workingHours,\n showWeekNumbers = false,\n onRangeChange,\n onSelectSlot,\n onEventClick,\n onEventChange,\n onViewChange,\n onDateChange,\n onCreateShortcut,\n height,\n labels: labelOverrides,\n toolbarEnd,\n className,\n}: CalendarGridProps) {\n const labels = useMemo(() => mergeLabels(labelOverrides), [labelOverrides])\n const zone = safeZone(timeZone)\n const secondZone =\n secondaryTimeZone && secondaryTimeZone !== zone && isValidTimeZone(secondaryTimeZone)\n ? secondaryTimeZone\n : ''\n const rootRef = useRef<HTMLDivElement>(null)\n const calRef = useRef<FullCalendar>(null)\n const [narrow, setNarrow] = useState(false)\n const [title, setTitle] = useState('')\n const lastRange = useRef('')\n const effective = effectiveCalendarView(view, narrow)\n\n // Callbacks change identity every render; FullCalendar options read them through a ref.\n const cb = useRef({\n onRangeChange,\n onSelectSlot,\n onEventClick,\n onEventChange,\n onViewChange,\n onDateChange,\n onCreateShortcut,\n })\n cb.current = {\n onRangeChange,\n onSelectSlot,\n onEventClick,\n onEventChange,\n onViewChange,\n onDateChange,\n onCreateShortcut,\n }\n\n const api = useCallback((): CalendarApi | null => calRef.current?.getApi() ?? null, [])\n\n // Phone layout by container width.\n useEffect(() => {\n const el = rootRef.current\n if (!el || typeof ResizeObserver === 'undefined') return\n const ro = new ResizeObserver(([entry]) => {\n setNarrow(entry.contentRect.width > 0 && entry.contentRect.width < CALENDAR_NARROW_WIDTH)\n })\n ro.observe(el)\n return () => ro.disconnect()\n }, [])\n\n // Follow the controlled view / date.\n useEffect(() => {\n const a = api()\n if (!a) return\n const fcView = FC_VIEW[effective]\n if (a.view.type !== fcView) {\n a.changeView(fcView, date)\n return\n }\n if (utcToDate(a.getDate(), zone) !== date) a.gotoDate(date)\n }, [api, effective, date, zone])\n\n const fcEvents = useMemo(() => events.map((e) => toEventInput(e, zone)), [events, zone])\n\n const changeView = useCallback(\n (v: CalendarViewKind) => {\n const a = api()\n if (a) a.changeView(FC_VIEW[effectiveCalendarView(v, narrow)])\n cb.current.onViewChange?.(v)\n },\n [api, narrow]\n )\n const nav = useCallback(\n (dir: 'prev' | 'next' | 'today') => {\n const a = api()\n if (!a) return\n if (dir === 'prev') a.prev()\n else if (dir === 'next') a.next()\n else a.gotoDate(utcToDate(Date.now(), zone))\n },\n [api, zone]\n )\n\n // Keyboard shortcuts (t, d/w/x/m/a/y, j/k/n/p/←/→, c).\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.defaultPrevented || e.metaKey || e.ctrlKey || e.altKey || isTypingTarget(e.target))\n return\n if (\n typeof document !== 'undefined' &&\n document.querySelector('[role=\"dialog\"], [role=\"alertdialog\"]')\n )\n return\n const viewKey: Record<string, CalendarViewKind> = {\n d: 'day',\n w: 'week',\n x: 'work_week',\n m: 'month',\n a: 'agenda',\n y: 'year',\n }\n const k = e.key.length === 1 ? e.key.toLowerCase() : e.key\n if (k === 't') nav('today')\n else if (k === 'j' || k === 'n' || k === 'ArrowRight') nav('next')\n else if (k === 'k' || k === 'p' || k === 'ArrowLeft') nav('prev')\n else if (viewKey[k]) changeView(viewKey[k])\n else if (k === 'c' && cb.current.onCreateShortcut) cb.current.onCreateShortcut()\n else return\n e.preventDefault()\n }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [nav, changeView])\n\n const onDatesSet = useCallback(\n (arg: DatesSetArg) => {\n setTitle(arg.view.title)\n const anchor = utcToDate(arg.view.calendar.getDate(), zone)\n const kind = VIEW_OF_FC[arg.view.type] ?? effective\n const key = `${kind}|${arg.start.toISOString()}|${arg.end.toISOString()}|${anchor}`\n if (key === lastRange.current) return\n lastRange.current = key\n cb.current.onRangeChange({ start: arg.start, end: arg.end, view: kind, date: anchor })\n if (anchor !== date) cb.current.onDateChange?.(anchor)\n },\n [zone, effective, date]\n )\n\n const onSelect = useCallback(\n (arg: DateSelectArg) => {\n if (!cb.current.onSelectSlot) return\n if (arg.allDay) {\n cb.current.onSelectSlot({\n startUtc: arg.start.toISOString(),\n endUtc: arg.end.toISOString(),\n allDay: true,\n startDate: arg.startStr.slice(0, 10),\n endDate: arg.endStr.slice(0, 10),\n })\n } else {\n cb.current.onSelectSlot({\n startUtc: arg.start.toISOString(),\n endUtc: arg.end.toISOString(),\n allDay: false,\n })\n }\n api()?.unselect()\n },\n [api]\n )\n\n const emitChange = useCallback((event: EventApi, revert: () => void) => {\n const g = event.extendedProps.grid as GridEvent | undefined\n if (!g || !cb.current.onEventChange || !event.start) {\n revert()\n return\n }\n const start = event.start\n if (event.allDay) {\n const startDate = event.startStr.slice(0, 10)\n const endDate = event.endStr ? event.endStr.slice(0, 10) : addDays(startDate, 1)\n const end = event.end ?? new Date(start.getTime() + 86_400_000)\n cb.current.onEventChange({\n instanceId: g.instanceId,\n eventId: g.eventId,\n startUtc: start.toISOString(),\n endUtc: end.toISOString(),\n allDay: true,\n startDate,\n endDate,\n revert,\n })\n return\n }\n const end = event.end ?? new Date(start.getTime() + 3_600_000)\n cb.current.onEventChange({\n instanceId: g.instanceId,\n eventId: g.eventId,\n startUtc: start.toISOString(),\n endUtc: end.toISOString(),\n allDay: false,\n revert,\n })\n }, [])\n\n const slotLabelContent = useCallback(\n (arg: SlotLabelContentArg) => {\n if (!secondZone) return arg.text\n return (\n <div className=\"arbi-cal-slot-labels\">\n <span className=\"arbi-cal-slot-secondary\">\n {(() => {\n // FullCalendar anchors slot-label dates on a fixed (winter) day, so its instant can carry\n // the wrong DST offset: convert the primary wall time on the visible date instead.\n const t = convertWall(`${date}T${utcToTime(arg.date, zone)}`, zone, secondZone).slice(\n 11,\n 16\n )\n return t.endsWith(':00') ? t.slice(0, 2) : t\n })()}\n </span>\n <span className=\"arbi-cal-slot-primary\">{arg.text}</span>\n </div>\n )\n },\n [secondZone, zone, date]\n )\n\n const allDayContent = useCallback(\n (arg: AllDayContentArg) => {\n if (!secondZone) return arg.text\n return (\n <div className=\"arbi-cal-slot-labels arbi-cal-zone-labels\">\n <span className=\"arbi-cal-slot-secondary\" title={secondZone}>\n {zoneOffsetLabel(secondZone)}\n </span>\n <span className=\"arbi-cal-slot-primary\" title={zone}>\n {zoneOffsetLabel(zone)}\n </span>\n </div>\n )\n },\n [secondZone, zone]\n )\n\n const dayHeaderContent = useCallback(\n (arg: DayHeaderContentArg) => {\n const t = arg.view.type\n if (!t.startsWith('timeGrid') && t !== 'arbiWorkWeek') return arg.text\n return (\n <div className={cn('arbi-cal-dayhead', arg.isToday && 'arbi-cal-dayhead-today')}>\n <span className=\"arbi-cal-dayhead-dow\">\n {formatInZone(arg.date, zone, { weekday: 'short' })}\n </span>\n <span className=\"arbi-cal-dayhead-num\">\n {formatInZone(arg.date, zone, { day: 'numeric' })}\n </span>\n </div>\n )\n },\n [zone]\n )\n\n const scrollTime = useMemo(() => {\n const starts = (workingHours ?? []).map((h) => h.start).sort()\n const first = starts[0] ?? '08:00'\n const h = Math.max(0, Number(first.slice(0, 2)) - 1)\n return `${String(h).padStart(2, '0')}:00:00`\n }, [workingHours])\n\n const views = useMemo(\n () => ({\n arbiWorkWeek: {\n type: 'timeGrid',\n duration: { weeks: 1 },\n hiddenDays: workWeekHiddenDays(workingHours),\n buttonText: labels.workWeek,\n },\n arbiAgenda: {\n type: 'list',\n duration: { days: 14 },\n dateAlignment: 'day',\n buttonText: labels.agenda,\n },\n multiMonthYear: { multiMonthMaxColumns: narrow ? 1 : 3 },\n // Growing rows (height auto) never overflow, so cap explicitly there; else fit the cell.\n dayGridMonth: { dayMaxEvents: height === 'auto' ? 3 : true },\n }),\n [workingHours, labels, narrow, height]\n )\n\n const plugins = useMemo(\n () => [\n dayGridPlugin,\n timeGridPlugin,\n listPlugin,\n interactionPlugin,\n multiMonthPlugin,\n getTemporalTimeZonePlugin(),\n ],\n []\n )\n\n const viewChoices = narrow ? NARROW_VIEWS : VIEW_ORDER\n\n return (\n <div\n ref={rootRef}\n className={cn(\n 'arbi-calendar flex h-full min-h-0 flex-col',\n narrow && 'arbi-calendar-narrow',\n secondZone && 'arbi-cal-dual',\n className\n )}\n data-testid=\"calendar-grid\"\n data-view={effective}\n data-time-zone={zone}\n >\n <div\n className=\"arbi-cal-toolbar flex flex-wrap items-center gap-2 px-1 pb-2\"\n data-testid=\"calendar-toolbar\"\n >\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => nav('today')}\n data-testid=\"calendar-today\"\n >\n {labels.today}\n </Button>\n <div className=\"flex items-center\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={labels.previous}\n onClick={() => nav('prev')}\n data-testid=\"calendar-prev\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={labels.next}\n onClick={() => nav('next')}\n data-testid=\"calendar-next\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n <h2\n className=\"min-w-0 flex-1 truncate text-base font-semibold sm:text-lg\"\n data-testid=\"calendar-title\"\n aria-live=\"polite\"\n >\n {title}\n </h2>\n {secondZone && !narrow && (\n <span\n className=\"hidden text-xs text-muted-foreground md:inline\"\n data-testid=\"calendar-zones\"\n >\n {zoneCity(zone)} {zoneOffsetLabel(zone)} · {zoneCity(secondZone)}{' '}\n {zoneOffsetLabel(secondZone)}\n </span>\n )}\n {narrow ? (\n <NativeSelect\n aria-label={labels.view}\n value={effective}\n onChange={(e) => changeView(e.target.value as CalendarViewKind)}\n data-testid=\"calendar-view-select\"\n className=\"h-8\"\n >\n {viewChoices.map((v) => (\n <option key={v} value={v}>\n {viewLabel(v, labels)}\n </option>\n ))}\n </NativeSelect>\n ) : (\n <div\n className=\"inline-flex rounded-md border border-border p-0.5\"\n role=\"group\"\n data-testid=\"calendar-view-switch\"\n >\n {viewChoices.map((v) => (\n <button\n key={v}\n type=\"button\"\n aria-pressed={effective === v}\n onClick={() => changeView(v)}\n data-testid={`calendar-view-${v}`}\n className={cn(\n 'rounded px-2.5 py-1 text-xs font-medium transition-colors',\n effective === v\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground'\n )}\n >\n {viewLabel(v, labels)}\n </button>\n ))}\n </div>\n )}\n {toolbarEnd}\n </div>\n <div className=\"arbi-cal-body min-h-0 flex-1\">\n <FullCalendar\n ref={calRef}\n plugins={plugins}\n timeZone={zone}\n initialView={FC_VIEW[effective]}\n initialDate={date}\n headerToolbar={false}\n height={height ?? '100%'}\n views={views}\n events={fcEvents}\n firstDay={weekStart}\n weekNumbers={showWeekNumbers}\n weekNumberCalculation={weekStart === 1 ? 'ISO' : 'local'}\n weekText={labels.weekAbbrev}\n nowIndicator\n businessHours={toBusinessHours(workingHours)}\n scrollTime={scrollTime}\n slotDuration=\"00:30:00\"\n snapDuration=\"00:15:00\"\n slotLabelFormat={{\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'short',\n }}\n eventTimeFormat={{\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'short',\n }}\n allDayText={labels.allDay}\n noEventsText={labels.noEvents}\n moreLinkText={labels.more}\n navLinks\n navLinkDayClick={(d) => {\n const a = api()\n a?.changeView(FC_VIEW.day, d)\n cb.current.onViewChange?.('day')\n }}\n selectable={!!onSelectSlot}\n selectMirror\n unselectAuto\n editable={!!onEventChange}\n eventResizableFromStart\n eventStartEditable={!!onEventChange}\n eventDurationEditable={!!onEventChange}\n stickyHeaderDates\n expandRows\n dayMaxEvents={height === 'auto' ? 3 : true}\n eventDisplay=\"auto\"\n datesSet={onDatesSet}\n select={onSelect}\n eventClick={(arg: EventClickArg) => {\n arg.jsEvent.preventDefault()\n const g = arg.event.extendedProps.grid as GridEvent | undefined\n if (g) cb.current.onEventClick?.(g.instanceId, g.eventId)\n }}\n eventDrop={(arg: EventDropArg) => emitChange(arg.event, arg.revert)}\n eventResize={(arg: EventResizeDoneArg) => emitChange(arg.event, arg.revert)}\n eventContent={(arg: EventContentArg) => <EventBody arg={arg} labels={labels} />}\n slotLabelContent={slotLabelContent}\n allDayContent={allDayContent}\n dayHeaderContent={dayHeaderContent}\n />\n </div>\n </div>\n )\n}\n","/** Compact month navigator (sidebar): pick a day; highlights today (in the user's zone) and the visible range. */\nimport { useMemo, useState } from 'react'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport type { MiniMonthProps } from './types'\nimport { mergeLabels } from './labels'\nimport {\n addDays,\n addMonths,\n formatPlainDate,\n isoWeekNumber,\n startOfWeek,\n todayInZone,\n} from './zone'\n\nexport function MiniMonth({\n date,\n weekStart,\n timeZone,\n onSelect,\n highlightRange,\n showWeekNumbers,\n labels: labelOverrides,\n className,\n}: MiniMonthProps) {\n const labels = mergeLabels(labelOverrides)\n const [view, setView] = useState(() => ({ for: date, month: `${date.slice(0, 7)}-01` }))\n // Follow the selected date into another month (state adjusted during render, not in an effect).\n if (view.for !== date) setView({ for: date, month: `${date.slice(0, 7)}-01` })\n const month = view.for === date ? view.month : `${date.slice(0, 7)}-01`\n const setMonth = (m: string) => setView({ for: date, month: m })\n\n const today = todayInZone(timeZone)\n const days = useMemo(() => {\n const first = startOfWeek(month, weekStart)\n return Array.from({ length: 42 }, (_, i) => addDays(first, i))\n }, [month, weekStart])\n const weekdays = days.slice(0, 7).map((d) => formatPlainDate(d, { weekday: 'narrow' }))\n const monthTitle = formatPlainDate(month, { month: 'long', year: 'numeric' })\n\n return (\n <div className={cn('select-none text-xs', className)} data-testid=\"calendar-mini-month\">\n <div className=\"mb-1 flex items-center justify-between px-1\">\n <span className=\"text-sm font-medium\" aria-live=\"polite\">\n {monthTitle}\n </span>\n <div className=\"flex\">\n <button\n type=\"button\"\n className=\"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={labels.previous}\n onClick={() => setMonth(addMonths(month, -1))}\n data-testid=\"calendar-mini-prev\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n className=\"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={labels.next}\n onClick={() => setMonth(addMonths(month, 1))}\n data-testid=\"calendar-mini-next\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n <div\n className={cn(\n 'grid gap-y-0.5 text-center',\n showWeekNumbers ? 'grid-cols-8' : 'grid-cols-7'\n )}\n role=\"grid\"\n aria-label={monthTitle}\n >\n {showWeekNumbers && (\n <span className=\"py-1 text-[10px] text-muted-foreground\">{labels.weekAbbrev}</span>\n )}\n {weekdays.map((w, i) => (\n <span\n key={i}\n className=\"py-1 text-[10px] font-medium uppercase text-muted-foreground\"\n role=\"columnheader\"\n >\n {w}\n </span>\n ))}\n {days.map((d, i) => {\n const inMonth = d.slice(0, 7) === month.slice(0, 7)\n const inRange = !!highlightRange && d >= highlightRange.start && d <= highlightRange.end\n const selected = d === date\n const isToday = d === today\n return (\n <MiniDay\n key={d}\n d={d}\n weekCell={showWeekNumbers && i % 7 === 0 ? isoWeekNumber(d) : null}\n inMonth={inMonth}\n inRange={inRange}\n selected={selected}\n isToday={isToday}\n onSelect={onSelect}\n />\n )\n })}\n </div>\n </div>\n )\n}\n\nfunction MiniDay({\n d,\n weekCell,\n inMonth,\n inRange,\n selected,\n isToday,\n onSelect,\n}: {\n d: string\n weekCell: number | null\n inMonth: boolean\n inRange: boolean\n selected: boolean\n isToday: boolean\n onSelect: (date: string) => void\n}) {\n return (\n <>\n {weekCell !== null && (\n <span className=\"flex items-center justify-center text-[10px] text-muted-foreground\">\n {weekCell}\n </span>\n )}\n <span className={cn('flex items-center justify-center', inRange && 'bg-primary/10')}>\n <button\n type=\"button\"\n role=\"gridcell\"\n aria-selected={selected}\n aria-current={isToday ? 'date' : undefined}\n aria-label={formatPlainDate(d, { dateStyle: 'full' })}\n onClick={() => onSelect(d)}\n data-testid={`calendar-mini-day-${d}`}\n className={cn(\n 'flex h-7 w-7 items-center justify-center rounded-full tabular-nums transition-colors',\n !inMonth && 'text-muted-foreground/60',\n isToday && !selected && 'font-semibold text-primary',\n selected ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n )}\n >\n {Number(d.slice(8, 10))}\n </button>\n </span>\n </>\n )\n}\n","/** Sidebar list of calendars (grouped: mine / shared / workspace / subscribed) plus overlay toggles. */\nimport { EllipsisVertical, Lightbulb, ListTodo, Lock, Plus, Workflow } from 'lucide-react'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport type { CalendarLabels, CalendarListItem, CalendarListProps, OverlayLayer } from './types'\nimport { mergeLabels } from './labels'\nimport { ColorSwatches } from './ui'\n\nconst GROUPS: CalendarListItem['group'][] = ['mine', 'shared', 'workspace', 'subscribed', 'rooms']\n\nconst groupLabel = (g: CalendarListItem['group'], l: CalendarLabels) =>\n ({\n mine: l.myCalendars,\n shared: l.sharedCalendars,\n workspace: l.workspaceCalendars,\n subscribed: l.subscribedCalendars,\n rooms: l.rooms,\n })[g]\n\nfunction Swatch({ color, checked }: { color: string; checked: boolean }) {\n return (\n <span\n className=\"flex h-4 w-4 shrink-0 items-center justify-center rounded-[4px] border-2\"\n style={{ borderColor: color, backgroundColor: checked ? color : 'transparent' }}\n aria-hidden\n >\n {checked && (\n <svg viewBox=\"0 0 12 12\" className=\"h-3 w-3\" fill=\"none\" stroke=\"white\" strokeWidth=\"2\">\n <path d=\"M2.5 6.5l2.5 2.5 4.5-5\" />\n </svg>\n )}\n </span>\n )\n}\n\nexport function CalendarList({\n calendars,\n overlays,\n onToggleHidden,\n onColorChange,\n onToggleOverlay,\n onCreate,\n onEdit,\n onImport,\n onExport,\n onDelete,\n onShare,\n onRefresh,\n onPublish,\n onSubscribe,\n onAddHolidays,\n onImportFile,\n labels: labelOverrides,\n className,\n}: CalendarListProps) {\n const l = mergeLabels(labelOverrides)\n const hasAddMenu = !!(onSubscribe || onAddHolidays || onImportFile)\n const plusButton = (\n <button\n type=\"button\"\n className=\"rounded p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={hasAddMenu ? l.addCalendar : l.createCalendar}\n title={hasAddMenu ? l.addCalendar : l.createCalendar}\n onClick={hasAddMenu ? undefined : onCreate}\n data-testid=\"calendar-list-create\"\n >\n <Plus className=\"h-4 w-4\" />\n </button>\n )\n const overlayRows: [OverlayLayer, string, typeof Lightbulb][] = [\n ['facts', l.facts, Lightbulb],\n ['workflows', l.workflows, Workflow],\n ['tasks', l.tasks, ListTodo],\n ]\n return (\n <div className={cn('space-y-3 text-sm', className)} data-testid=\"calendar-list\">\n {GROUPS.map((g) => {\n const items = calendars.filter((c) => c.group === g)\n if (!items.length && g !== 'mine') return null\n return (\n <section key={g} aria-label={groupLabel(g, l)}>\n <div className=\"flex items-center justify-between px-1 pb-1\">\n <h4 className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {groupLabel(g, l)}\n </h4>\n {g === 'mine' &&\n (hasAddMenu ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>{plusButton}</DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-56\"\n data-testid=\"calendar-add-menu\"\n >\n <DropdownMenuItem onSelect={onCreate} data-testid=\"calendar-add-new\">\n {l.createCalendar}\n </DropdownMenuItem>\n {onSubscribe && (\n <DropdownMenuItem\n onSelect={onSubscribe}\n data-testid=\"calendar-add-subscribe\"\n >\n {l.subscribeFromUrl}\n </DropdownMenuItem>\n )}\n {onAddHolidays && (\n <DropdownMenuItem\n onSelect={onAddHolidays}\n data-testid=\"calendar-add-holidays\"\n >\n {l.addHolidays}\n </DropdownMenuItem>\n )}\n {onImportFile && (\n <DropdownMenuItem onSelect={onImportFile} data-testid=\"calendar-add-import\">\n {l.importIcs}\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : (\n plusButton\n ))}\n </div>\n <ul className=\"space-y-0.5\">\n {items.map((c) => {\n const name = c.locked ? l.locked : c.name || l.noTitle\n const isOwner = c.role === 'owner'\n return (\n <li\n key={c.id}\n className=\"group flex items-center gap-2 rounded-md px-1 py-1 hover:bg-muted/60\"\n data-testid={`calendar-list-item-${c.id}`}\n >\n <label className=\"flex min-w-0 flex-1 cursor-pointer items-center gap-2\">\n <input\n type=\"checkbox\"\n className=\"sr-only\"\n checked={!c.hidden}\n onChange={() => onToggleHidden(c.id)}\n aria-label={`${c.hidden ? l.showCalendar : l.hideCalendar} ${name}`}\n data-testid={`calendar-list-toggle-${c.id}`}\n />\n <Swatch color={c.color} checked={!c.hidden} />\n <span\n className={cn(\n 'min-w-0 truncate',\n c.locked && 'italic text-muted-foreground'\n )}\n >\n {name}\n </span>\n {c.locked && (\n <Lock className=\"h-3 w-3 shrink-0 text-muted-foreground\" aria-hidden />\n )}\n {c.provider && c.provider !== 'native' && (\n <span\n className=\"shrink-0 rounded border border-border px-1 text-[10px] leading-4 text-muted-foreground\"\n data-testid={`calendar-list-provider-${c.id}`}\n >\n {(\n {\n google: 'Google',\n microsoft: 'Outlook',\n caldav: 'CalDAV',\n ics: 'ICS',\n } as Record<string, string>\n )[c.provider] ?? c.provider}\n </span>\n )}\n </label>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"rounded p-0.5 text-muted-foreground opacity-60 hover:bg-muted hover:text-foreground group-hover:opacity-100 focus-visible:opacity-100\"\n aria-label={`${l.editCalendar}: ${name}`}\n data-testid={`calendar-list-menu-${c.id}`}\n >\n <EllipsisVertical className=\"h-4 w-4\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n <DropdownMenuLabel className=\"text-xs\">{l.calendarColor}</DropdownMenuLabel>\n <div className=\"px-2 pb-2\">\n <ColorSwatches\n value={c.color}\n onChange={(color) => color && onColorChange(c.id, color)}\n />\n </div>\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => onEdit(c.id)} disabled={c.locked}>\n {l.editCalendar}\n </DropdownMenuItem>\n {onShare && isOwner && c.group !== 'subscribed' && (\n <DropdownMenuItem\n onSelect={() => onShare(c.id)}\n disabled={c.locked}\n data-testid={`calendar-list-share-${c.id}`}\n >\n {l.shareCalendar}\n </DropdownMenuItem>\n )}\n {onPublish &&\n isOwner &&\n c.group === 'mine' &&\n (!c.provider || c.provider === 'native') && (\n <DropdownMenuItem\n onSelect={() => onPublish(c.id)}\n disabled={c.locked}\n data-testid={`calendar-list-publish-${c.id}`}\n >\n {l.publishTo}\n </DropdownMenuItem>\n )}\n {onRefresh && c.group === 'subscribed' && (\n <DropdownMenuItem\n onSelect={() => onRefresh(c.id)}\n data-testid={`calendar-list-refresh-${c.id}`}\n >\n {l.refreshCalendar}\n </DropdownMenuItem>\n )}\n {c.canWrite && (\n <DropdownMenuItem onSelect={() => onImport(c.id)} disabled={c.locked}>\n {l.importCalendar}\n </DropdownMenuItem>\n )}\n <DropdownMenuItem onSelect={() => onExport(c.id)} disabled={c.locked}>\n {l.exportCalendar}\n </DropdownMenuItem>\n {isOwner && !c.isDefault && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n className=\"text-destructive focus:text-destructive\"\n onSelect={() => onDelete(c.id)}\n >\n {l.deleteCalendar}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </li>\n )\n })}\n </ul>\n </section>\n )\n })}\n\n <section aria-label={l.overlays}>\n <h4 className=\"px-1 pb-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {l.overlays}\n </h4>\n <ul className=\"space-y-0.5\">\n {overlayRows.map(([layer, label, Icon]) => (\n <li key={layer}>\n <label className=\"flex cursor-pointer items-center gap-2 rounded-md px-1 py-1 hover:bg-muted/60\">\n <input\n type=\"checkbox\"\n className=\"h-4 w-4 accent-[hsl(var(--primary))]\"\n checked={overlays[layer]}\n onChange={() => onToggleOverlay(layer)}\n data-testid={`calendar-overlay-${layer}`}\n />\n <Icon className=\"h-3.5 w-3.5 text-muted-foreground\" aria-hidden />\n <span>{label}</span>\n </label>\n </li>\n ))}\n </ul>\n </section>\n </div>\n )\n}\n","/** Online meetings of events: whether one can be joined now, and what is still to come. */\nimport type { CalendarEvent } from '@arbidocs/react'\n\n/** Join opens 10 minutes before the start and closes at the end. */\nexport const JOIN_EARLY_MS = 10 * 60_000\n\n/** Turn a plain phone number into a dialable conference URI; pass web links and explicit URIs through. */\nexport function normalizeConferenceAddress(value: string): string {\n const trimmed = value.trim()\n if (/^https?:\\/\\//i.test(trimmed) || /^tel:/i.test(trimmed)) return trimmed\n const digits = trimmed.replace(/\\D/g, '')\n if (digits.length >= 7 && /^[+\\d\\s().-]+$/.test(trimmed))\n return `tel:${trimmed.replace(/[\\s().-]/g, '')}`\n return trimmed\n}\n\nexport function conferenceUrl(event: Pick<CalendarEvent, 'conference'>): string | null {\n const url = event.conference?.url\n return url && /^(https?:\\/\\/|tel:)/i.test(url) ? url : null\n}\n\nexport function canJoinEvent(\n event: Pick<CalendarEvent, 'conference' | 'start_utc' | 'end_utc'>,\n now: number = Date.now()\n): boolean {\n if (!conferenceUrl(event)) return false\n return (\n now >= new Date(event.start_utc).getTime() - JOIN_EARLY_MS &&\n now <= new Date(event.end_utc).getTime()\n )\n}\n\n/** Events still to come (or in progress), soonest first, declined ones left out unless asked. */\nexport function upcomingOf(\n events: CalendarEvent[],\n now: number,\n {\n showDeclined = false,\n hidden = new Set<string>(),\n }: { showDeclined?: boolean; hidden?: Set<string> } = {}\n): CalendarEvent[] {\n return events\n .filter((e) => Date.parse(e.end_utc) > now)\n .filter((e) => showDeclined || e.my_partstat !== 'declined')\n .filter((e) => e.status !== 'cancelled' && !hidden.has(e.calendar_id))\n .sort((a, b) => a.start_utc.localeCompare(b.start_utc))\n}\n","/**\n * Pure helpers over `EventDraft`: start/end edits that keep the duration, the all-day toggle,\n * a draft from a grid selection, validation. Zone math goes through ./zone (Temporal).\n */\nimport type {\n AttendeeDraft,\n ConferenceDraft,\n DateTimeSpec,\n EventDraft,\n SlotSelection,\n} from './types'\nimport { addDays, diffDays, safeZone, utcToDate, utcToWall, wallToEpochMs } from './zone'\n\nexport const isAllDayDraft = (d: Pick<EventDraft, 'start'>): boolean => !!d.start.date\n\nconst datePart = (spec: DateTimeSpec): string => spec.date ?? (spec.date_time ?? '').slice(0, 10)\nconst timePart = (spec: DateTimeSpec): string => (spec.date_time ?? '').slice(11, 16)\n\n/** The zone a spec's wall time is in (floating → the default). */\nconst specZone = (spec: DateTimeSpec, defaultZone: string): string =>\n safeZone(spec.time_zone, defaultZone)\n\n/** Date (YYYY-MM-DD) of a spec as written. */\nexport const specDate = datePart\n/** Time (HH:MM) of a spec as written ('' for all-day). */\nexport const specTime = timePart\n\n/** Epoch ms of a timed spec. */\nfunction specEpochMs(spec: DateTimeSpec, defaultZone: string): number {\n if (spec.date) return wallToEpochMs(spec.date, defaultZone)\n return wallToEpochMs(spec.date_time ?? '', specZone(spec, defaultZone))\n}\n\n/** Start/end instants of a draft (all-day: midnight of the start day / exclusive end day in the default zone). */\nexport function draftRangeUtc(\n d: EventDraft,\n defaultZone: string\n): { startMs: number; endMs: number } {\n return { startMs: specEpochMs(d.start, defaultZone), endMs: specEpochMs(d.end, defaultZone) }\n}\n\n/** The inclusive last day shown for an all-day draft (API end date is exclusive). */\nexport function allDayInclusiveEnd(d: EventDraft): string {\n const start = d.start.date ?? ''\n const end = d.end.date ?? start\n const last = addDays(end, -1)\n return last < start ? start : last\n}\n\nfunction timedSpec(date: string, time: string, zone: string | null | undefined): DateTimeSpec {\n return { date: null, date_time: `${date}T${time || '00:00'}`, time_zone: zone ?? null }\n}\n\n/**\n * Change the start (date, time and/or zone) and move the end by the same amount, the way every\n * calendar app does. The end keeps its own zone.\n */\nexport function setDraftStart(\n d: EventDraft,\n change: { date?: string; time?: string; timeZone?: string | null },\n defaultZone: string\n): EventDraft {\n if (isAllDayDraft(d)) {\n const oldStart = d.start.date ?? change.date ?? ''\n const start = change.date ?? oldStart\n const days = Math.max(1, diffDays(oldStart, d.end.date ?? addDays(oldStart, 1)))\n return { ...d, start: { date: start }, end: { date: addDays(start, days) } }\n }\n const { startMs, endMs } = draftRangeUtc(d, defaultZone)\n const duration = Math.max(0, endMs - startMs)\n const startZone = change.timeZone !== undefined ? change.timeZone : (d.start.time_zone ?? null)\n const start = timedSpec(\n change.date ?? datePart(d.start),\n change.time ?? timePart(d.start),\n startZone\n )\n const newStartMs = specEpochMs(start, defaultZone)\n const endZone = specZone(d.end, defaultZone)\n const endWall = utcToWall(newStartMs + duration, endZone)\n return {\n ...d,\n start,\n end: { date: null, date_time: endWall, time_zone: d.end.time_zone ?? null },\n }\n}\n\n/** Change the end (date, time and/or zone) only. All-day `date` is the inclusive last day. */\nexport function setDraftEnd(\n d: EventDraft,\n change: { date?: string; time?: string; timeZone?: string | null }\n): EventDraft {\n if (isAllDayDraft(d)) {\n const last = change.date ?? allDayInclusiveEnd(d)\n return { ...d, end: { date: addDays(last, 1) } }\n }\n const zone = change.timeZone !== undefined ? change.timeZone : (d.end.time_zone ?? null)\n return {\n ...d,\n end: timedSpec(change.date ?? datePart(d.end), change.time ?? timePart(d.end), zone),\n }\n}\n\n/** Toggle all-day. Turning it off gives a timed event at `defaultStartTime` for `defaultDurationMinutes`. */\nexport function setDraftAllDay(\n d: EventDraft,\n allDay: boolean,\n defaultZone: string,\n defaultStartTime = '09:00',\n defaultDurationMinutes = 60\n): EventDraft {\n if (allDay === isAllDayDraft(d)) return d\n if (allDay) {\n const start = datePart(d.start)\n const endDay = datePart(d.end) || start\n // A timed event ending at 00:00 the next day covers one day.\n const lastDay = timePart(d.end) === '00:00' && endDay > start ? addDays(endDay, -1) : endDay\n return {\n ...d,\n start: { date: start },\n end: { date: addDays(lastDay < start ? start : lastDay, 1) },\n }\n }\n const zone = safeZone(defaultZone)\n const start = timedSpec(d.start.date ?? '', defaultStartTime, zone)\n const startMs = specEpochMs(start, zone)\n const end: DateTimeSpec = {\n date: null,\n date_time: utcToWall(startMs + defaultDurationMinutes * 60_000, zone),\n time_zone: zone,\n }\n return { ...d, start, end }\n}\n\n/** A new draft from a grid selection, in the user's zone. */\nexport function draftFromSlot(\n slot: SlotSelection,\n timeZone: string,\n calendarId?: string,\n title = ''\n): EventDraft {\n const zone = safeZone(timeZone)\n if (slot.allDay) {\n const start = slot.startDate ?? utcToDate(slot.startUtc, zone)\n const end = slot.endDate ?? addDays(start, 1)\n return { calendar_id: calendarId, title, start: { date: start }, end: { date: end } }\n }\n return {\n calendar_id: calendarId,\n title,\n start: { date: null, date_time: utcToWall(slot.startUtc, zone), time_zone: zone },\n end: { date: null, date_time: utcToWall(slot.endUtc, zone), time_zone: zone },\n }\n}\n\nexport type DraftError = 'titleRequired' | 'invalidRange'\n\n/** First problem that blocks saving, or null. */\nexport function validateDraft(d: EventDraft, defaultZone: string): DraftError | null {\n if (!d.title.trim()) return 'titleRequired'\n if (isAllDayDraft(d)) {\n if (!d.start.date || !d.end.date || d.end.date <= d.start.date) return 'invalidRange'\n return null\n }\n if (!d.start.date_time || !d.end.date_time) return 'invalidRange'\n const { startMs, endMs } = draftRangeUtc(d, defaultZone)\n if (!(endMs >= startMs)) return 'invalidRange'\n return null\n}\n\n/** The label stored on an ARBI webinar's conference (data, not display text: it marks the event a webinar). */\nexport const ARBI_WEBINAR_LABEL = 'ARBI webinar'\n\n/** An ARBI conference that is a webinar (the editor's `kind`, or the label stored with the event). */\nexport const isWebinarConference = (\n c: Pick<ConferenceDraft, 'type' | 'label' | 'kind'> | null | undefined\n): boolean => c?.type === 'arbi' && (c.kind === 'webinar' || c.label === ARBI_WEBINAR_LABEL)\n\n/** The key of an attendee in `ConferenceDraft.roles`: its e-mail (lower-cased), else its user id. */\nexport const attendeeKey = (a: Pick<AttendeeDraft, 'email' | 'user_id'>): string =>\n a.email?.toLowerCase() || a.user_id || ''\n","/**\n * RRULE (RFC 5545) ↔ the event editor's recurrence form.\n *\n * The form covers what Outlook / Google offer in their \"custom recurrence\" dialogs: daily, weekly on\n * chosen weekdays, monthly on a day of the month or on the nth / last weekday (BYSETPOS), yearly on a\n * date or on the nth / last weekday of a month, every N periods, ending never / on a date / after N\n * occurrences. Anything else round-trips untouched as a raw custom rule. The backend validates.\n */\nimport { Temporal } from 'temporal-polyfill'\nimport { wallToUtc } from './zone'\n\nexport const RRULE_WEEKDAYS = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU'] as const\nexport type RRuleWeekday = (typeof RRULE_WEEKDAYS)[number]\n\nexport type RecurrenceFrequency = 'none' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'custom'\n/** 1..4 = first..fourth, -1 = last. */\nexport type SetPos = 1 | 2 | 3 | 4 | -1\n\nexport interface RecurrenceForm {\n freq: RecurrenceFrequency\n interval: number\n /** Weekly: the chosen days. */\n weekdays: RRuleWeekday[]\n /** Monthly / yearly: on a day of the month, or on the nth weekday. */\n monthlyMode: 'day' | 'weekday'\n monthDay: number\n setPos: SetPos\n setPosDay: RRuleWeekday\n /** Yearly: 1..12. */\n month: number\n end: 'never' | 'until' | 'count'\n /** YYYY-MM-DD, inclusive, in the event's zone. */\n until: string | null\n count: number\n /** The raw rule for `custom` (and the original text of any parsed rule). */\n raw: string\n}\n\n/** The weekday code of a `YYYY-MM-DD` date. */\nexport function weekdayOf(date: string): RRuleWeekday {\n return RRULE_WEEKDAYS[Temporal.PlainDate.from(date).dayOfWeek - 1]\n}\n\n/** Which occurrence of its weekday a date is in its month: 1..4, or -1 when it is the last one. */\nexport function setPosOf(date: string, preferLast = false): SetPos {\n const d = Temporal.PlainDate.from(date)\n const isLast = d.day + 7 > d.daysInMonth\n const nth = Math.ceil(d.day / 7)\n if (isLast && (preferLast || nth > 4)) return -1\n return Math.min(nth, 4) as SetPos\n}\n\n/** A sensible form for an event starting on `startDate` (YYYY-MM-DD). */\nexport function defaultRecurrenceForm(\n startDate: string,\n freq: RecurrenceFrequency = 'none'\n): RecurrenceForm {\n const d = Temporal.PlainDate.from(startDate)\n return {\n freq,\n interval: 1,\n weekdays: [weekdayOf(startDate)],\n monthlyMode: 'day',\n monthDay: d.day,\n setPos: setPosOf(startDate),\n setPosDay: weekdayOf(startDate),\n month: d.month,\n end: 'never',\n until: null,\n count: 10,\n raw: '',\n }\n}\n\nexport interface BuildRRuleContext {\n /** All-day events take a DATE UNTIL; timed events a UTC DATE-TIME. */\n allDay?: boolean\n /** Zone the until date is read in (end of that day). */\n timeZone?: string | null\n}\n\nfunction untilValue(until: string, ctx: BuildRRuleContext): string {\n if (ctx.allDay) return until.replace(/-/g, '')\n // Inclusive: the last instant of the until day in the event's zone, in UTC.\n const zone = ctx.timeZone || 'UTC'\n const utc = wallToUtc(`${until}T23:59:59`, zone)\n const t = Temporal.Instant.from(utc).toZonedDateTimeISO('UTC')\n const p = (n: number, w = 2) => String(n).padStart(w, '0')\n return `${p(t.year, 4)}${p(t.month)}${p(t.day)}T${p(t.hour)}${p(t.minute)}${p(t.second)}Z`\n}\n\n/** Build the RRULE value (no `RRULE:` prefix), or null for \"does not repeat\". */\nexport function buildRRule(form: RecurrenceForm, ctx: BuildRRuleContext = {}): string | null {\n if (form.freq === 'none') return null\n if (form.freq === 'custom') {\n const raw = form.raw.trim().replace(/^RRULE:/i, '')\n return raw || null\n }\n const parts: string[] = [`FREQ=${form.freq.toUpperCase()}`]\n const interval = Math.max(1, Math.floor(form.interval || 1))\n if (interval > 1) parts.push(`INTERVAL=${interval}`)\n if (form.freq === 'weekly') {\n const days = RRULE_WEEKDAYS.filter((d) => form.weekdays.includes(d))\n if (days.length) parts.push(`BYDAY=${days.join(',')}`)\n } else if (form.freq === 'monthly' || form.freq === 'yearly') {\n if (form.freq === 'yearly') parts.push(`BYMONTH=${form.month}`)\n if (form.monthlyMode === 'day') {\n parts.push(`BYMONTHDAY=${form.monthDay}`)\n } else {\n parts.push(`BYDAY=${form.setPosDay}`)\n parts.push(`BYSETPOS=${form.setPos}`)\n }\n }\n if (form.end === 'until' && form.until) parts.push(`UNTIL=${untilValue(form.until, ctx)}`)\n else if (form.end === 'count') parts.push(`COUNT=${Math.max(1, Math.floor(form.count || 1))}`)\n return parts.join(';')\n}\n\nfunction tokenize(rrule: string): Map<string, string> {\n const out = new Map<string, string>()\n for (const seg of rrule.replace(/^RRULE:/i, '').split(';')) {\n const i = seg.indexOf('=')\n if (i > 0)\n out.set(\n seg.slice(0, i).trim().toUpperCase(),\n seg\n .slice(i + 1)\n .trim()\n .toUpperCase()\n )\n }\n return out\n}\n\nfunction parseUntil(value: string, ctx: BuildRRuleContext): string | null {\n const m = /^(\\d{4})(\\d{2})(\\d{2})(?:T(\\d{2})(\\d{2})(\\d{2})(Z?))?$/.exec(value)\n if (!m) return null\n const date = `${m[1]}-${m[2]}-${m[3]}`\n if (!m[4] || m[7] !== 'Z') return date\n // A UTC until: the date it falls on in the event's zone.\n const inst = Temporal.Instant.from(`${date}T${m[4]}:${m[5]}:${m[6]}Z`)\n return inst\n .toZonedDateTimeISO(ctx.timeZone || 'UTC')\n .toPlainDate()\n .toString()\n}\n\nconst SUPPORTED = new Set([\n 'FREQ',\n 'INTERVAL',\n 'BYDAY',\n 'BYMONTHDAY',\n 'BYMONTH',\n 'BYSETPOS',\n 'UNTIL',\n 'COUNT',\n 'WKST',\n])\n\n/**\n * Parse an RRULE into the form. `startDate` seeds the fields the rule does not pin. A rule outside\n * the form's vocabulary comes back as `freq: 'custom'` with its text in `raw`.\n */\nexport function parseRRule(\n rrule: string | null | undefined,\n startDate: string,\n ctx: BuildRRuleContext = {}\n): RecurrenceForm {\n const base = defaultRecurrenceForm(startDate)\n if (!rrule || !rrule.trim()) return base\n const raw = rrule.trim().replace(/^RRULE:/i, '')\n const custom: RecurrenceForm = { ...base, freq: 'custom', raw }\n const t = tokenize(raw)\n for (const key of t.keys()) if (!SUPPORTED.has(key)) return custom\n const freq = t.get('FREQ')\n const form: RecurrenceForm = { ...base, raw }\n const interval = Number(t.get('INTERVAL') ?? '1')\n if (!Number.isInteger(interval) || interval < 1) return custom\n form.interval = interval\n if (t.has('UNTIL') && t.has('COUNT')) return custom\n if (t.has('UNTIL')) {\n const until = parseUntil(t.get('UNTIL') ?? '', ctx)\n if (!until) return custom\n form.end = 'until'\n form.until = until\n } else if (t.has('COUNT')) {\n const count = Number(t.get('COUNT'))\n if (!Number.isInteger(count) || count < 1) return custom\n form.end = 'count'\n form.count = count\n }\n const byday = t.get('BYDAY')\n const bymonthday = t.get('BYMONTHDAY')\n const bymonth = t.get('BYMONTH')\n const bysetpos = t.get('BYSETPOS')\n\n /** BYDAY=MO;BYSETPOS=-1 or BYDAY=-1MO → nth weekday. */\n const nthWeekday = (): boolean => {\n if (!byday || bymonthday) return false\n const m = /^([+-]?\\d)?(MO|TU|WE|TH|FR|SA|SU)$/.exec(byday)\n if (!m) return false\n const pos = Number(m[1] ?? bysetpos ?? NaN)\n if (m[1] && bysetpos) return false\n if (![1, 2, 3, 4, -1].includes(pos)) return false\n form.monthlyMode = 'weekday'\n form.setPos = pos as SetPos\n form.setPosDay = m[2] as RRuleWeekday\n return true\n }\n const monthDay = (): boolean => {\n if (!bymonthday || byday || bysetpos) return false\n const n = Number(bymonthday)\n if (!Number.isInteger(n) || n < 1 || n > 31) return false\n form.monthlyMode = 'day'\n form.monthDay = n\n return true\n }\n\n switch (freq) {\n case 'DAILY':\n if (byday || bymonthday || bymonth || bysetpos) return custom\n form.freq = 'daily'\n return form\n case 'WEEKLY': {\n if (bymonthday || bymonth || bysetpos) return custom\n form.freq = 'weekly'\n if (byday) {\n const days = byday.split(',')\n if (!days.every((d) => (RRULE_WEEKDAYS as readonly string[]).includes(d))) return custom\n form.weekdays = days as RRuleWeekday[]\n }\n return form\n }\n case 'MONTHLY':\n if (bymonth) return custom\n form.freq = 'monthly'\n if (!byday && !bymonthday && !bysetpos) return form\n return nthWeekday() || monthDay() ? form : custom\n case 'YEARLY': {\n form.freq = 'yearly'\n if (bymonth) {\n const n = Number(bymonth)\n if (!Number.isInteger(n) || n < 1 || n > 12) return custom\n form.month = n\n }\n if (!byday && !bymonthday && !bysetpos) return form\n if (!bymonth) return custom\n return nthWeekday() || monthDay() ? form : custom\n }\n default:\n return custom\n }\n}\n\nexport interface RecurrenceDescribeLabels {\n every: string\n day: string\n days: string\n week: string\n weeks: string\n month: string\n months: string\n year: string\n years: string\n on: string\n onDay: string\n until: string\n times: string\n ordinals: Record<SetPos, string>\n weekdayNames: Record<RRuleWeekday, string>\n monthNames: string[]\n doesNotRepeat: string\n custom: string\n}\n\nexport const DEFAULT_RECURRENCE_DESCRIBE_LABELS: RecurrenceDescribeLabels = {\n every: 'Every',\n day: 'day',\n days: 'days',\n week: 'week',\n weeks: 'weeks',\n month: 'month',\n months: 'months',\n year: 'year',\n years: 'years',\n on: 'on',\n onDay: 'on day',\n until: 'until',\n times: 'times',\n ordinals: { 1: 'first', 2: 'second', 3: 'third', 4: 'fourth', [-1]: 'last' } as Record<\n SetPos,\n string\n >,\n weekdayNames: {\n MO: 'Monday',\n TU: 'Tuesday',\n WE: 'Wednesday',\n TH: 'Thursday',\n FR: 'Friday',\n SA: 'Saturday',\n SU: 'Sunday',\n },\n monthNames: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n doesNotRepeat: 'Does not repeat',\n custom: 'Custom rule',\n}\n\n/** One-line human summary: \"Every 2 weeks on Monday, Wednesday, 10 times\". */\nexport function describeRecurrence(\n form: RecurrenceForm,\n labels: RecurrenceDescribeLabels = DEFAULT_RECURRENCE_DESCRIBE_LABELS\n): string {\n const l = labels\n if (form.freq === 'none') return l.doesNotRepeat\n if (form.freq === 'custom') return `${l.custom}: ${form.raw}`\n const unit = {\n daily: [l.day, l.days],\n weekly: [l.week, l.weeks],\n monthly: [l.month, l.months],\n yearly: [l.year, l.years],\n }[form.freq]\n let text = form.interval > 1 ? `${l.every} ${form.interval} ${unit[1]}` : `${l.every} ${unit[0]}`\n if (form.freq === 'weekly' && form.weekdays.length) {\n const days = RRULE_WEEKDAYS.filter((d) => form.weekdays.includes(d)).map(\n (d) => l.weekdayNames[d]\n )\n text += ` ${l.on} ${days.join(', ')}`\n }\n if (form.freq === 'monthly' || form.freq === 'yearly') {\n const monthName = form.freq === 'yearly' ? ` ${l.monthNames[form.month - 1]}` : ''\n text +=\n form.monthlyMode === 'day'\n ? form.freq === 'yearly'\n ? ` ${l.on}${monthName} ${form.monthDay}`\n : ` ${l.onDay} ${form.monthDay}`\n : ` ${l.on} ${l.ordinals[form.setPos]} ${l.weekdayNames[form.setPosDay]}${monthName ? ` of${monthName}` : ''}`\n }\n if (form.end === 'until' && form.until) text += `, ${l.until} ${form.until}`\n if (form.end === 'count') text += `, ${form.count} ${l.times}`\n return text\n}\n","import type { RRuleWeekday } from './recurrence'\n\nexport interface RecurrenceEditorLabels {\n doesNotRepeat: string\n daily: string\n weekly: string\n monthly: string\n yearly: string\n custom: string\n every: string\n units: Record<'daily' | 'weekly' | 'monthly' | 'yearly', string>\n onDayOfMonth: string\n onThe: string\n ends: string\n never: string\n onDate: string\n after: string\n occurrences: string\n rrule: string\n rrulePlaceholder: string\n weekdayShort: Record<RRuleWeekday, string>\n}\n\nexport const DEFAULT_RECURRENCE_EDITOR_LABELS: RecurrenceEditorLabels = {\n doesNotRepeat: 'Does not repeat',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n yearly: 'Yearly',\n custom: 'Custom rule…',\n every: 'Every',\n units: { daily: 'day(s)', weekly: 'week(s)', monthly: 'month(s)', yearly: 'year(s)' },\n onDayOfMonth: 'On day',\n onThe: 'On the',\n ends: 'Ends',\n never: 'Never',\n onDate: 'On',\n after: 'After',\n occurrences: 'occurrences',\n rrule: 'iCalendar rule (RRULE)',\n rrulePlaceholder: 'FREQ=WEEKLY;BYDAY=MO,WE',\n weekdayShort: { MO: 'M', TU: 'T', WE: 'W', TH: 'T', FR: 'F', SA: 'S', SU: 'S' },\n}\n","/**\n * Event recurrence editor: does not repeat / daily / weekly (weekdays) / monthly (day of month or\n * nth / last weekday) / yearly / custom RRULE; every N; ends never / on a date / after N times.\n * Emits the RRULE string (null = does not repeat). A superset of the Tasks `RecurrenceBuilder`\n * (that one is time-of-day based; an event's time comes from its start).\n */\nimport { useState } from 'react'\nimport { Input, cn } from '@arbidocs/react/ui'\nimport {\n buildRRule,\n DEFAULT_RECURRENCE_DESCRIBE_LABELS,\n describeRecurrence,\n parseRRule,\n RRULE_WEEKDAYS,\n setPosOf,\n weekdayOf,\n type RecurrenceForm,\n type RecurrenceFrequency,\n type RRuleWeekday,\n type SetPos,\n} from './recurrence'\nimport { NativeSelect } from './ui'\nimport { DEFAULT_RECURRENCE_EDITOR_LABELS, type RecurrenceEditorLabels } from './recurrence-labels'\n\nexport interface RecurrenceEditorProps {\n /** Current RRULE (no `RRULE:` prefix), null/'' = does not repeat. */\n rrule: string | null | undefined\n onChange: (rrule: string | null) => void\n /** Event start date (YYYY-MM-DD) in its zone: seeds weekday / month day. */\n startDate: string\n allDay: boolean\n timeZone: string\n labels?: Partial<RecurrenceEditorLabels>\n idPrefix?: string\n}\n\nconst SETPOS_OPTIONS: SetPos[] = [1, 2, 3, 4, -1]\n\nexport function RecurrenceEditor({\n rrule,\n onChange,\n startDate,\n allDay,\n timeZone,\n labels: labelOverrides,\n idPrefix = 'calendar-recurrence',\n}: RecurrenceEditorProps) {\n const l = { ...DEFAULT_RECURRENCE_EDITOR_LABELS, ...labelOverrides }\n const ctx = { allDay, timeZone }\n // The form is the editing state; the parent only sees RRULE strings. Re-seed when the rule\n // changes from outside (not from our own emit).\n const [form, setForm] = useState<RecurrenceForm>(() => parseRRule(rrule, startDate, ctx))\n const [emitted, setEmitted] = useState<string | null>(rrule || null)\n if ((rrule || null) !== emitted) {\n setEmitted(rrule || null)\n setForm(parseRRule(rrule, startDate, ctx))\n }\n\n const update = (patch: Partial<RecurrenceForm>) => {\n const next = { ...form, ...patch }\n setForm(next)\n const out = buildRRule(next, ctx)\n setEmitted(out)\n onChange(out)\n }\n\n const setFreq = (freq: RecurrenceFrequency) => {\n if (freq === 'custom') {\n update({ freq, raw: buildRRule(form, ctx) ?? form.raw ?? '' })\n return\n }\n const seeded: Partial<RecurrenceForm> = { freq }\n if (form.freq === 'none' || form.freq === 'custom') {\n seeded.weekdays = [weekdayOf(startDate)]\n seeded.monthDay = Number(startDate.slice(8, 10))\n seeded.setPos = setPosOf(startDate)\n seeded.setPosDay = weekdayOf(startDate)\n seeded.month = Number(startDate.slice(5, 7))\n seeded.interval = 1\n }\n update(seeded)\n }\n\n const weekdayName = (d: RRuleWeekday) => DEFAULT_RECURRENCE_DESCRIBE_LABELS.weekdayNames[d]\n const ordinal = (p: SetPos) => DEFAULT_RECURRENCE_DESCRIBE_LABELS.ordinals[p]\n const monthNames = DEFAULT_RECURRENCE_DESCRIBE_LABELS.monthNames\n\n return (\n <div className=\"space-y-2\" data-testid=\"calendar-recurrence\">\n <NativeSelect\n id={`${idPrefix}-freq`}\n aria-label={l.doesNotRepeat}\n value={form.freq}\n onChange={(e) => setFreq(e.target.value as RecurrenceFrequency)}\n data-testid=\"calendar-recurrence-freq\"\n className=\"w-full sm:w-56\"\n >\n <option value=\"none\">{l.doesNotRepeat}</option>\n <option value=\"daily\">{l.daily}</option>\n <option value=\"weekly\">{l.weekly}</option>\n <option value=\"monthly\">{l.monthly}</option>\n <option value=\"yearly\">{l.yearly}</option>\n <option value=\"custom\">{l.custom}</option>\n </NativeSelect>\n\n {form.freq === 'custom' && (\n <div className=\"space-y-1\">\n <label htmlFor={`${idPrefix}-raw`} className=\"text-xs text-muted-foreground\">\n {l.rrule}\n </label>\n <Input\n id={`${idPrefix}-raw`}\n value={form.raw}\n placeholder={l.rrulePlaceholder}\n onChange={(e) => update({ raw: e.target.value })}\n data-testid=\"calendar-recurrence-raw\"\n className=\"font-mono text-xs\"\n />\n </div>\n )}\n\n {form.freq !== 'none' && form.freq !== 'custom' && (\n <div className=\"space-y-2 rounded-md border border-border p-2\">\n <div className=\"flex flex-wrap items-center gap-2 text-sm\">\n <span>{l.every}</span>\n <Input\n type=\"number\"\n min={1}\n max={999}\n aria-label={l.every}\n className=\"h-8 w-16\"\n value={form.interval}\n onChange={(e) => update({ interval: Math.max(1, Number(e.target.value) || 1) })}\n data-testid=\"calendar-recurrence-interval\"\n />\n <span>{l.units[form.freq]}</span>\n </div>\n\n {form.freq === 'weekly' && (\n <div className=\"flex flex-wrap gap-1\" role=\"group\" aria-label={l.weekly}>\n {RRULE_WEEKDAYS.map((d) => {\n const on = form.weekdays.includes(d)\n return (\n <button\n key={d}\n type=\"button\"\n aria-pressed={on}\n aria-label={weekdayName(d)}\n title={weekdayName(d)}\n onClick={() => {\n const next = on ? form.weekdays.filter((x) => x !== d) : [...form.weekdays, d]\n update({ weekdays: next.length ? next : form.weekdays })\n }}\n data-testid={`calendar-recurrence-day-${d}`}\n className={cn(\n 'h-8 w-8 rounded-full border text-xs font-medium transition-colors',\n on\n ? 'border-primary bg-primary text-primary-foreground'\n : 'border-border hover:bg-muted'\n )}\n >\n {l.weekdayShort[d]}\n </button>\n )\n })}\n </div>\n )}\n\n {(form.freq === 'monthly' || form.freq === 'yearly') && (\n <div className=\"space-y-1.5 text-sm\">\n {form.freq === 'yearly' && (\n <NativeSelect\n aria-label={l.yearly}\n value={form.month}\n onChange={(e) => update({ month: Number(e.target.value) })}\n data-testid=\"calendar-recurrence-month\"\n className=\"h-8\"\n >\n {monthNames.map((m, i) => (\n <option key={m} value={i + 1}>\n {m}\n </option>\n ))}\n </NativeSelect>\n )}\n <label className=\"flex flex-wrap items-center gap-2\">\n <input\n type=\"radio\"\n name={`${idPrefix}-monthly`}\n checked={form.monthlyMode === 'day'}\n onChange={() => update({ monthlyMode: 'day' })}\n data-testid=\"calendar-recurrence-mode-day\"\n />\n <span>{l.onDayOfMonth}</span>\n <Input\n type=\"number\"\n min={1}\n max={31}\n aria-label={l.onDayOfMonth}\n className=\"h-8 w-16\"\n value={form.monthDay}\n disabled={form.monthlyMode !== 'day'}\n onChange={(e) =>\n update({ monthDay: Math.min(31, Math.max(1, Number(e.target.value) || 1)) })\n }\n data-testid=\"calendar-recurrence-monthday\"\n />\n </label>\n <label className=\"flex flex-wrap items-center gap-2\">\n <input\n type=\"radio\"\n name={`${idPrefix}-monthly`}\n checked={form.monthlyMode === 'weekday'}\n onChange={() => update({ monthlyMode: 'weekday' })}\n data-testid=\"calendar-recurrence-mode-weekday\"\n />\n <span>{l.onThe}</span>\n <NativeSelect\n aria-label={l.onThe}\n className=\"h-8\"\n value={form.setPos}\n disabled={form.monthlyMode !== 'weekday'}\n onChange={(e) => update({ setPos: Number(e.target.value) as SetPos })}\n data-testid=\"calendar-recurrence-setpos\"\n >\n {SETPOS_OPTIONS.map((p) => (\n <option key={p} value={p}>\n {ordinal(p)}\n </option>\n ))}\n </NativeSelect>\n <NativeSelect\n aria-label={l.weekly}\n className=\"h-8\"\n value={form.setPosDay}\n disabled={form.monthlyMode !== 'weekday'}\n onChange={(e) => update({ setPosDay: e.target.value as RRuleWeekday })}\n data-testid=\"calendar-recurrence-setpos-day\"\n >\n {RRULE_WEEKDAYS.map((d) => (\n <option key={d} value={d}>\n {weekdayName(d)}\n </option>\n ))}\n </NativeSelect>\n </label>\n </div>\n )}\n\n <div className=\"space-y-1.5 text-sm\">\n <div className=\"text-xs font-medium text-muted-foreground\">{l.ends}</div>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"radio\"\n name={`${idPrefix}-end`}\n checked={form.end === 'never'}\n onChange={() => update({ end: 'never' })}\n data-testid=\"calendar-recurrence-end-never\"\n />\n {l.never}\n </label>\n <label className=\"flex flex-wrap items-center gap-2\">\n <input\n type=\"radio\"\n name={`${idPrefix}-end`}\n checked={form.end === 'until'}\n onChange={() => update({ end: 'until', until: form.until ?? startDate })}\n data-testid=\"calendar-recurrence-end-until\"\n />\n {l.onDate}\n <Input\n type=\"date\"\n aria-label={l.onDate}\n className=\"h-8 w-40\"\n value={form.until ?? ''}\n min={startDate}\n disabled={form.end !== 'until'}\n onChange={(e) => update({ until: e.target.value || null })}\n data-testid=\"calendar-recurrence-until\"\n />\n </label>\n <label className=\"flex flex-wrap items-center gap-2\">\n <input\n type=\"radio\"\n name={`${idPrefix}-end`}\n checked={form.end === 'count'}\n onChange={() => update({ end: 'count' })}\n data-testid=\"calendar-recurrence-end-count\"\n />\n {l.after}\n <Input\n type=\"number\"\n min={1}\n max={999}\n aria-label={l.occurrences}\n className=\"h-8 w-20\"\n value={form.count}\n disabled={form.end !== 'count'}\n onChange={(e) => update({ count: Math.max(1, Number(e.target.value) || 1) })}\n data-testid=\"calendar-recurrence-count\"\n />\n {l.occurrences}\n </label>\n </div>\n <p className=\"text-xs text-muted-foreground\" data-testid=\"calendar-recurrence-summary\">\n {describeRecurrence(form)}\n </p>\n </div>\n )}\n </div>\n )\n}\n","/** Display formatting shared by the calendar components. */\nimport {\n addDays,\n formatInZone,\n formatPlainDate,\n safeZone,\n utcToDate,\n zoneCity,\n zoneOffsetLabel,\n} from './zone'\n\n/** `New York (GMT-4)`. */\nexport function formatZoneLabel(zone: string, at: Date | number = Date.now()): string {\n return `${zoneCity(zone)} (${zoneOffsetLabel(zone, at)})`\n}\n\n/** Human time range of an event in `zone`: \"Fri, 16 Oct · 10:00 – 11:00\", all-day \"Fri, 16 Oct – Sun, 18 Oct\". */\nexport function formatEventWhen(\n e: {\n all_day: boolean\n start_utc: string\n end_utc: string\n start: { date?: string | null }\n end: { date?: string | null }\n },\n zone: string,\n locale?: string\n): string {\n const z = safeZone(zone)\n const dayFmt: Intl.DateTimeFormatOptions = {\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n }\n if (e.all_day) {\n const start = e.start.date ?? utcToDate(e.start_utc, z)\n const endExcl = e.end.date ?? utcToDate(e.end_utc, z)\n const last = endExcl > start ? addDays(endExcl, -1) : start\n const a = formatPlainDate(start, dayFmt, locale)\n return last === start ? a : `${a} – ${formatPlainDate(last, dayFmt, locale)}`\n }\n const timeFmt: Intl.DateTimeFormatOptions = { hour: 'numeric', minute: '2-digit' }\n const sameDay = utcToDate(e.start_utc, z) === utcToDate(e.end_utc, z)\n const a = `${formatInZone(e.start_utc, z, dayFmt, locale)} · ${formatInZone(e.start_utc, z, timeFmt, locale)}`\n return sameDay\n ? `${a} – ${formatInZone(e.end_utc, z, timeFmt, locale)}`\n : `${a} – ${formatInZone(e.end_utc, z, dayFmt, locale)} · ${formatInZone(e.end_utc, z, timeFmt, locale)}`\n}\n","/** Searchable IANA time-zone picker (city, region, current GMT offset). */\nimport { useMemo, useState } from 'react'\nimport { Check, ChevronDown, Globe } from 'lucide-react'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n Popover,\n PopoverContent,\n PopoverTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport type { TimeZonePickerProps } from './types'\nimport { mergeLabels } from './labels'\nimport { listTimeZones, zoneCity, zoneOffsetLabel, zoneOffsetMinutes } from './zone'\nimport { formatZoneLabel } from './format'\n\nexport function TimeZonePicker({\n value,\n onChange,\n zones,\n allowNone,\n onClear,\n id,\n ariaLabel,\n disabled,\n labels: labelOverrides,\n className,\n}: TimeZonePickerProps) {\n const labels = mergeLabels(labelOverrides)\n const [open, setOpen] = useState(false)\n const options = useMemo(() => {\n const now = Date.now()\n const list = zones?.length ? zones : listTimeZones()\n return list\n .map((z) => {\n let offset = 0\n try {\n offset = zoneOffsetMinutes(z, now)\n } catch {\n return null\n }\n return { zone: z, offset, label: zoneOffsetLabel(z, now), city: zoneCity(z) }\n })\n .filter((o): o is NonNullable<typeof o> => o !== null)\n .sort((a, b) => a.offset - b.offset || a.zone.localeCompare(b.zone))\n // `open` recomputes offsets each time the list is shown (DST may have changed).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [zones, open])\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n id={id}\n disabled={disabled}\n aria-label={ariaLabel ?? labels.timeZone}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n data-testid=\"calendar-tz-picker\"\n className={cn(\n 'inline-flex h-9 min-w-0 items-center gap-2 rounded-md border border-input bg-background px-2 text-left text-sm shadow-sm',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50',\n className\n )}\n >\n <Globe className=\"h-4 w-4 shrink-0 text-muted-foreground\" aria-hidden />\n <span className=\"min-w-0 flex-1 truncate\">\n {value ? (\n formatZoneLabel(value)\n ) : (\n <span className=\"text-muted-foreground\">{labels.none}</span>\n )}\n </span>\n <ChevronDown className=\"h-4 w-4 shrink-0 text-muted-foreground\" aria-hidden />\n </button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[320px] p-0\" align=\"start\">\n <Command\n filter={(itemValue, search) =>\n itemValue.toLowerCase().includes(search.toLowerCase().trim()) ? 1 : 0\n }\n >\n <CommandInput placeholder={labels.searchTimeZones} data-testid=\"calendar-tz-search\" />\n <CommandList className=\"max-h-72\">\n <CommandEmpty>—</CommandEmpty>\n <CommandGroup>\n {allowNone && (\n <CommandItem\n value={`__none__ ${labels.none}`}\n onSelect={() => {\n onClear?.()\n setOpen(false)\n }}\n >\n <Check className={cn('mr-2 h-4 w-4', value ? 'opacity-0' : 'opacity-100')} />\n {labels.none}\n </CommandItem>\n )}\n {options.map((o) => (\n <CommandItem\n key={o.zone}\n value={`${o.zone} ${o.city} ${o.label}`}\n onSelect={() => {\n onChange(o.zone)\n setOpen(false)\n }}\n data-testid={`calendar-tz-option-${o.zone}`}\n >\n <Check\n className={cn(\n 'mr-2 h-4 w-4 shrink-0',\n value === o.zone ? 'opacity-100' : 'opacity-0'\n )}\n />\n <span className=\"min-w-0 flex-1 truncate\">{o.zone.replace(/_/g, ' ')}</span>\n <span className=\"ml-2 shrink-0 text-xs tabular-nums text-muted-foreground\">\n {o.label}\n </span>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )\n}\n","/** Reminder offsets: minutes ↔ (value, unit) and human text. */\n\nexport type ReminderUnit = 'minutes' | 'hours' | 'days' | 'weeks'\n\nconst UNIT_MINUTES: Record<ReminderUnit, number> = {\n minutes: 1,\n hours: 60,\n days: 24 * 60,\n weeks: 7 * 24 * 60,\n}\n\n/** The largest unit that divides `minutes` exactly: 90 → 90 minutes, 120 → 2 hours, 1440 → 1 day. */\nexport function splitReminderMinutes(minutes: number): { value: number; unit: ReminderUnit } {\n const abs = Math.abs(minutes)\n if (abs === 0) return { value: 0, unit: 'minutes' }\n for (const unit of ['weeks', 'days', 'hours'] as const) {\n if (abs % UNIT_MINUTES[unit] === 0) return { value: minutes / UNIT_MINUTES[unit], unit }\n }\n return { value: minutes, unit: 'minutes' }\n}\n\nexport function reminderToMinutes(value: number, unit: ReminderUnit): number {\n return Math.round(value * UNIT_MINUTES[unit])\n}\n\nexport interface ReminderFormatLabels {\n atStart: string\n before: string\n after: string\n minute: string\n minutes: string\n hour: string\n hours: string\n day: string\n days: string\n week: string\n weeks: string\n}\n\nexport const DEFAULT_REMINDER_FORMAT_LABELS: ReminderFormatLabels = {\n atStart: 'At time of event',\n before: 'before',\n after: 'after',\n minute: 'minute',\n minutes: 'minutes',\n hour: 'hour',\n hours: 'hours',\n day: 'day',\n days: 'days',\n week: 'week',\n weeks: 'weeks',\n}\n\n/** `15 minutes before`, `1 hour before`, `2 days before`, `At time of event`. */\nexport function formatReminder(\n minutesBefore: number,\n labels: ReminderFormatLabels = DEFAULT_REMINDER_FORMAT_LABELS\n): string {\n if (minutesBefore === 0) return labels.atStart\n const { value, unit } = splitReminderMinutes(Math.abs(minutesBefore))\n const singular = {\n minutes: labels.minute,\n hours: labels.hour,\n days: labels.day,\n weeks: labels.week,\n }[unit]\n const word = value === 1 ? singular : labels[unit]\n return `${value} ${word} ${minutesBefore > 0 ? labels.before : labels.after}`\n}\n\n/** Common presets offered in the \"add reminder\" menu. */\nexport const REMINDER_PRESETS = [0, 5, 10, 15, 30, 60, 120, 24 * 60, 2 * 24 * 60, 7 * 24 * 60]\n","/** Event attachments: links, uploaded files saved to a workspace, and existing workspace documents. */\nimport { useState } from 'react'\nimport { Paperclip } from 'lucide-react'\nimport { Button, Input } from '@arbidocs/react/ui'\nimport { DocumentPicker, type PickerGroup } from '../settings/DocumentPicker'\nimport type { AttachmentDraft, CalendarLabels } from './types'\nimport { FieldRow, NativeSelect } from './ui'\n\nexport interface EventAttachmentsProps {\n attachments: AttachmentDraft[]\n documents: (AttachmentDraft & { doc_id: string; title: string })[]\n workspaces: { id: string; name: string }[]\n currentWorkspaceId?: string | null\n onChange: (attachments: AttachmentDraft[]) => void\n onUpload?: (files: File[], workspaceId: string) => Promise<AttachmentDraft[]>\n labels: CalendarLabels\n}\n\nexport function EventAttachments({\n attachments,\n documents,\n workspaces,\n currentWorkspaceId,\n onChange,\n onUpload,\n labels,\n}: EventAttachmentsProps) {\n const [attachUrl, setAttachUrl] = useState('')\n const [attachTitle, setAttachTitle] = useState('')\n const [workspaceId, setWorkspaceId] = useState(currentWorkspaceId ?? '')\n const [uploading, setUploading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const groups: PickerGroup[] = [\n {\n id: 'workspace',\n heading: 'In this workspace',\n docs: documents.map((doc) => ({ id: doc.doc_id, title: doc.title })),\n },\n ]\n\n const addLink = () => {\n const url = attachUrl.trim()\n if (!url) return\n onChange([...attachments, { url, title: attachTitle.trim() || null }])\n setAttachUrl('')\n setAttachTitle('')\n }\n\n const toggleDocument = (id: string) => {\n const document = documents.find((item) => item.doc_id === id)\n if (!document) return\n const exists = attachments.some((item) => item.doc_id === id)\n onChange(exists ? attachments.filter((item) => item.doc_id !== id) : [...attachments, document])\n }\n\n const uploadFiles = async (selected: FileList | null) => {\n if (!selected?.length || !onUpload || !workspaceId) return\n setUploading(true)\n setError(null)\n try {\n onChange([...attachments, ...(await onUpload(Array.from(selected), workspaceId))])\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Could not upload attachments')\n } finally {\n setUploading(false)\n }\n }\n\n return (\n <FieldRow icon={<Paperclip className=\"h-4 w-4\" />} label={labels.attachments}>\n {attachments.length > 0 && (\n <ul className=\"space-y-1\">\n {attachments.map((attachment, index) => (\n <li key={`${attachment.url}-${index}`} className=\"flex items-center gap-2 text-sm\">\n <a\n href={attachment.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"min-w-0 flex-1 truncate text-primary hover:underline\"\n >\n {attachment.title || attachment.url}\n </a>\n <button\n type=\"button\"\n className=\"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={`${labels.remove} ${attachment.title || attachment.url}`}\n onClick={() => onChange(attachments.filter((_, itemIndex) => itemIndex !== index))}\n >\n <span aria-hidden>×</span>\n </button>\n </li>\n ))}\n </ul>\n )}\n <div className=\"flex flex-wrap items-center gap-2\">\n <Input\n type=\"url\"\n aria-label={labels.attachmentUrlPlaceholder}\n placeholder={labels.attachmentUrlPlaceholder}\n className=\"h-8 min-w-0 flex-1\"\n value={attachUrl}\n onChange={(event) => setAttachUrl(event.target.value)}\n />\n <Input\n aria-label={labels.attachmentTitlePlaceholder}\n placeholder={labels.attachmentTitlePlaceholder}\n className=\"h-8 w-40\"\n value={attachTitle}\n onChange={(event) => setAttachTitle(event.target.value)}\n />\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={addLink}\n disabled={!attachUrl.trim()}\n >\n {labels.addAttachment}\n </Button>\n </div>\n {documents.length > 0 && (\n <div className=\"mt-2 space-y-1\">\n <p className=\"text-xs text-muted-foreground\">Choose existing documents</p>\n <DocumentPicker\n groups={groups}\n value=\"\"\n selectedIds={attachments.flatMap((item) => (item.doc_id ? [item.doc_id] : []))}\n onValueChange={toggleDocument}\n labels={{ placeholder: 'Search this workspace…' }}\n />\n </div>\n )}\n {onUpload && workspaces.length > 0 && (\n <div className=\"mt-2 flex flex-wrap items-center gap-2\">\n <span className=\"w-full text-xs text-muted-foreground\">\n Attach files (saved to a workspace)\n </span>\n <NativeSelect\n aria-label=\"Save attachment to workspace\"\n value={workspaceId}\n onChange={(event) => setWorkspaceId(event.target.value)}\n className=\"h-8 max-w-56\"\n >\n {workspaces.map((workspace) => (\n <option key={workspace.id} value={workspace.id}>\n {workspace.id === currentWorkspaceId\n ? `${workspace.name} (current workspace)`\n : workspace.name}\n </option>\n ))}\n </NativeSelect>\n <Input\n type=\"file\"\n multiple\n aria-label=\"Choose files to attach\"\n className=\"h-8 min-w-0 flex-1\"\n disabled={uploading}\n onChange={(event) => {\n void uploadFiles(event.target.files)\n event.currentTarget.value = ''\n }}\n />\n {uploading && <span className=\"text-xs text-muted-foreground\">Saving attachments…</span>}\n </div>\n )}\n {error && (\n <p className=\"text-xs text-destructive\" role=\"alert\">\n {error}\n </p>\n )}\n </FieldRow>\n )\n}\n","/**\n * Full event form (create / edit). Controlled: every edit calls `onChange` with the next\n * `EventDraft` (API shape). Times are wall times in their own zones: start and end may carry\n * different zones (a flight). The host wraps it in a dialog / sheet / page.\n */\nimport { useId, useMemo, useState, type KeyboardEvent, type ReactNode } from 'react'\nimport {\n TextAlignStart,\n Bell,\n Clock,\n Globe,\n Lock,\n MapPin,\n Plus,\n Repeat,\n Tag,\n Trash2,\n Users,\n Video,\n X,\n Palette,\n CalendarDays,\n} from 'lucide-react'\nimport { Button, Input, Switch, Textarea, cn } from '@arbidocs/react/ui'\nimport type {\n AttendeeDraft,\n CalendarLabels,\n EventDraft,\n EventEditorProps,\n ReminderDraft,\n Sensitivity,\n ShowAs,\n WebinarRole,\n} from './types'\nimport { mergeLabels } from './labels'\nimport { normalizeConferenceAddress } from './conference'\nimport {\n ARBI_WEBINAR_LABEL,\n allDayInclusiveEnd,\n attendeeKey,\n isAllDayDraft,\n isWebinarConference,\n setDraftAllDay,\n setDraftEnd,\n setDraftStart,\n specDate,\n specTime,\n validateDraft,\n} from './draft'\nimport { RecurrenceEditor } from './RecurrenceEditor'\nimport { TimeZonePicker } from './TimeZonePicker'\nimport {\n formatReminder,\n reminderToMinutes,\n splitReminderMinutes,\n type ReminderUnit,\n} from './reminders'\nimport { ColorSwatches, FieldRow, NativeSelect } from './ui'\nimport { EventAttachments } from './EventAttachments'\n\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\nfunction Chip({\n children,\n onRemove,\n removeLabel,\n}: {\n children: ReactNode\n onRemove: () => void\n removeLabel: string\n}) {\n return (\n <span className=\"inline-flex max-w-full items-center gap-1 rounded-full border border-border bg-muted/60 py-0.5 pl-2 pr-1 text-xs\">\n {children}\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label={removeLabel}\n className=\"rounded-full p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </span>\n )\n}\n\nfunction showAsLabel(v: ShowAs, l: CalendarLabels): string {\n return {\n free: l.free,\n tentative: l.tentative,\n busy: l.busy,\n oof: l.oof,\n working_elsewhere: l.workingElsewhere,\n }[v]\n}\n\nexport function EventEditor({\n value,\n onChange,\n onSave,\n onCancel,\n onDelete,\n calendars,\n mode,\n canAddCall,\n onAddCall,\n canAddWebinar,\n isWebinarAttendee,\n defaultTimeZone,\n schedulingSlot,\n attachmentDocuments = [],\n attachmentWorkspaces = [],\n currentWorkspaceId,\n onUploadAttachments,\n attendeeSuggestions,\n onAttendeeQueryChange,\n saving,\n error,\n labels: labelOverrides,\n zones,\n className,\n}: EventEditorProps) {\n const l = useMemo(() => mergeLabels(labelOverrides), [labelOverrides])\n const uid = useId()\n const id = (s: string) => `${uid}-${s}`\n const allDay = isAllDayDraft(value)\n const startZone = value.start.time_zone ?? defaultTimeZone\n const endZone = value.end.time_zone ?? startZone\n const [showZones, setShowZones] = useState(\n () => !allDay && (startZone !== defaultTimeZone || endZone !== startZone)\n )\n const [attendeeInput, setAttendeeInput] = useState('')\n const [categoryInput, setCategoryInput] = useState('')\n const [linkInput, setLinkInput] = useState<string | null>(null)\n const [addingCall, setAddingCall] = useState(false)\n const [webinar, setWebinar] = useState(false)\n const [touched, setTouched] = useState(false)\n const [focus, setFocus] = useState(() => !!value.auto_decline && value.show_as !== 'oof')\n const showDecline = value.show_as === 'oof' || focus\n\n const set = (patch: Partial<EventDraft>) => onChange({ ...value, ...patch })\n const problem = validateDraft(value, defaultTimeZone)\n const shownProblem = problem === 'invalidRange' || (touched && problem) ? problem : null\n\n const writable = calendars.filter((c) => c.canWrite && !c.locked)\n const calendarColor = calendars.find((c) => c.id === value.calendar_id)?.color\n\n // ── attendees ──\n const attendees = value.attendees ?? []\n const addAttendees = (raw: string) => {\n const emails = raw\n .split(/[\\s,;]+/)\n .map((s) => s.trim())\n .filter((s) => EMAIL_RE.test(s))\n if (!emails.length) return false\n const have = new Set(attendees.map((a) => (a.email ?? '').toLowerCase()))\n const next: AttendeeDraft[] = [...attendees]\n for (const email of emails) {\n if (have.has(email.toLowerCase())) continue\n have.add(email.toLowerCase())\n next.push({ email, role: 'required', kind: 'individual' })\n }\n set({ attendees: next })\n return true\n }\n const onAttendeeKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' || e.key === ',' || e.key === ';' || e.key === 'Tab') {\n if (attendeeInput.trim() && addAttendees(attendeeInput)) {\n e.preventDefault()\n setAttendeeInput('')\n }\n } else if (e.key === 'Backspace' && !attendeeInput && attendees.length) {\n set({ attendees: attendees.slice(0, -1) })\n }\n }\n\n // ── categories ──\n const categories = value.categories ?? []\n const addCategory = () => {\n const c = categoryInput.trim()\n if (c && !categories.includes(c)) set({ categories: [...categories, c] })\n setCategoryInput('')\n }\n\n // ── reminders ──\n const reminders = value.reminders ?? []\n const setReminder = (i: number, r: ReminderDraft) =>\n set({ reminders: reminders.map((x, j) => (j === i ? r : x)) })\n\n // ── conference ──\n const addArbiCall = async () => {\n if (!onAddCall) return\n setAddingCall(true)\n try {\n const call = await onAddCall()\n if (call)\n set({\n conference: { type: 'arbi', url: call.url, call_id: call.call_id, label: l.arbiCall },\n })\n } finally {\n setAddingCall(false)\n }\n }\n\n // A webinar's call is made on save, once its roles are picked: until then the conference has no link.\n const addArbiWebinar = () =>\n set({\n conference: { type: 'arbi', kind: 'webinar', url: '', label: ARBI_WEBINAR_LABEL, roles: {} },\n })\n const isWebinar = isWebinarConference(value.conference)\n const roles = value.conference?.roles ?? {}\n const setRole = (a: AttendeeDraft, role: WebinarRole) =>\n value.conference &&\n set({ conference: { ...value.conference, roles: { ...roles, [attendeeKey(a)]: role } } })\n\n const startDate = specDate(value.start)\n const submit = () => {\n setTouched(true)\n if (problem || saving) return\n onSave()\n }\n\n return (\n <form\n className={cn('flex h-full min-h-0 flex-col', className)}\n onSubmit={(e) => {\n e.preventDefault()\n submit()\n }}\n data-testid=\"calendar-event-editor\"\n aria-label={mode === 'create' ? l.createTitle : l.editTitle}\n >\n <div className=\"min-h-0 flex-1 space-y-4 overflow-y-auto p-1 scrollbar-themed\">\n {/* Title */}\n <Input\n id={id('title')}\n aria-label={l.title}\n placeholder={l.titlePlaceholder}\n value={value.title}\n autoFocus={mode === 'create'}\n onChange={(e) => set({ title: e.target.value })}\n className=\"h-11 border-0 border-b border-border rounded-none px-1 text-lg font-medium shadow-none focus-visible:ring-0 focus-visible:border-primary\"\n data-testid=\"calendar-editor-title\"\n />\n\n {/* When */}\n <FieldRow icon={<Clock className=\"h-4 w-4\" />}>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Input\n type=\"date\"\n aria-label={l.start}\n className=\"h-9 w-[9.5rem]\"\n value={startDate}\n onChange={(e) =>\n e.target.value &&\n onChange(setDraftStart(value, { date: e.target.value }, defaultTimeZone))\n }\n data-testid=\"calendar-editor-start-date\"\n />\n {!allDay && (\n <Input\n type=\"time\"\n aria-label={l.startTime}\n className=\"h-9 w-[7rem]\"\n step={300}\n value={specTime(value.start)}\n onChange={(e) =>\n e.target.value &&\n onChange(setDraftStart(value, { time: e.target.value }, defaultTimeZone))\n }\n data-testid=\"calendar-editor-start-time\"\n />\n )}\n <span className=\"text-muted-foreground\">–</span>\n {!allDay && (\n <Input\n type=\"time\"\n aria-label={l.endTime}\n className=\"h-9 w-[7rem]\"\n step={300}\n value={specTime(value.end)}\n onChange={(e) =>\n e.target.value && onChange(setDraftEnd(value, { time: e.target.value }))\n }\n data-testid=\"calendar-editor-end-time\"\n />\n )}\n <Input\n type=\"date\"\n aria-label={l.end}\n className=\"h-9 w-[9.5rem]\"\n value={allDay ? allDayInclusiveEnd(value) : specDate(value.end)}\n min={startDate}\n onChange={(e) =>\n e.target.value && onChange(setDraftEnd(value, { date: e.target.value }))\n }\n data-testid=\"calendar-editor-end-date\"\n />\n </div>\n <div className=\"flex flex-wrap items-center gap-4 pt-1 text-sm\">\n <label className=\"flex items-center gap-2\">\n <Switch\n checked={allDay}\n onCheckedChange={(on) => onChange(setDraftAllDay(value, on, startZone))}\n aria-label={l.allDay}\n data-testid=\"calendar-editor-all-day\"\n />\n {l.allDay}\n </label>\n {!allDay && (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground\"\n onClick={() => setShowZones((v) => !v)}\n aria-expanded={showZones}\n data-testid=\"calendar-editor-zones-toggle\"\n >\n <Globe className=\"h-3.5 w-3.5\" />\n {l.separateTimeZones}\n </button>\n )}\n </div>\n {!allDay && showZones && (\n <div className=\"grid gap-2 pt-1 sm:grid-cols-2\">\n <div className=\"space-y-1\">\n <div className=\"text-xs text-muted-foreground\">{l.startTimeZone}</div>\n <TimeZonePicker\n value={startZone}\n zones={zones}\n ariaLabel={l.startTimeZone}\n labels={labelOverrides}\n className=\"w-full\"\n onChange={(z) => {\n // Keep the wall time, change the zone; the end zone follows unless it was set apart.\n const moved = setDraftStart(value, { timeZone: z }, defaultTimeZone)\n const endFollows = (value.end.time_zone ?? startZone) === startZone\n onChange(endFollows ? { ...moved, end: { ...moved.end, time_zone: z } } : moved)\n }}\n />\n </div>\n <div className=\"space-y-1\">\n <div className=\"text-xs text-muted-foreground\">{l.endTimeZone}</div>\n <TimeZonePicker\n value={endZone}\n zones={zones}\n ariaLabel={l.endTimeZone}\n labels={labelOverrides}\n className=\"w-full\"\n onChange={(z) => onChange(setDraftEnd(value, { timeZone: z }))}\n />\n </div>\n </div>\n )}\n </FieldRow>\n\n {/* Repeat */}\n <FieldRow icon={<Repeat className=\"h-4 w-4\" />}>\n <RecurrenceEditor\n rrule={value.recurrence?.rrule ?? null}\n startDate={startDate}\n allDay={allDay}\n timeZone={startZone}\n idPrefix={id('rrule')}\n onChange={(rrule) =>\n set({\n recurrence: rrule\n ? { ...(value.recurrence ?? {}), rrule }\n : value.recurrence?.rdates?.length\n ? { ...value.recurrence, rrule: null }\n : null,\n })\n }\n />\n </FieldRow>\n\n {/* Calendar */}\n {writable.length > 0 && (\n <FieldRow icon={<CalendarDays className=\"h-4 w-4\" />}>\n <NativeSelect\n aria-label={l.calendar}\n value={value.calendar_id ?? ''}\n onChange={(e) => set({ calendar_id: e.target.value || undefined })}\n data-testid=\"calendar-editor-calendar\"\n className=\"w-full sm:w-72\"\n >\n {!value.calendar_id && <option value=\"\">{l.calendar}</option>}\n {writable.map((c) => (\n <option key={c.id} value={c.id}>\n {c.name ?? c.id}\n </option>\n ))}\n </NativeSelect>\n </FieldRow>\n )}\n\n {/* Audio or video call */}\n <FieldRow icon={<Video className=\"h-4 w-4\" />}>\n {value.conference ? (\n <div\n className=\"flex min-w-0 items-center gap-2 text-sm\"\n data-testid=\"calendar-editor-conference\"\n >\n <span className=\"font-medium\">\n {isWebinar\n ? l.arbiWebinar\n : value.conference.label ||\n (value.conference.type === 'arbi' ? l.arbiCall : l.conference)}\n </span>\n {value.conference.url ? (\n <a\n href={value.conference.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"min-w-0 truncate text-xs text-primary underline-offset-2 hover:underline\"\n >\n {value.conference.url.replace(/#.*$/, '')}\n </a>\n ) : (\n <span className=\"min-w-0 truncate text-xs text-muted-foreground\">\n {l.webinarLinkOnSave}\n </span>\n )}\n <button\n type=\"button\"\n className=\"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={l.removeConference}\n onClick={() => set({ conference: null })}\n data-testid=\"calendar-editor-conference-remove\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n ) : linkInput !== null ? (\n <div className=\"flex items-center gap-2\">\n <Input\n type=\"text\"\n aria-label={l.addMeetingLink}\n placeholder={l.meetingLinkPlaceholder}\n value={linkInput}\n autoFocus\n onChange={(e) => setLinkInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n if (linkInput.trim())\n set({\n conference: {\n type: 'external',\n url: normalizeConferenceAddress(linkInput),\n },\n })\n setLinkInput(null)\n } else if (e.key === 'Escape') setLinkInput(null)\n }}\n data-testid=\"calendar-editor-link-input\"\n />\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={() => {\n if (linkInput.trim())\n set({\n conference: { type: 'external', url: normalizeConferenceAddress(linkInput) },\n })\n setLinkInput(null)\n }}\n >\n <Plus className=\"h-4 w-4\" />\n </Button>\n </div>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {canAddCall && onAddCall && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"secondary\"\n disabled={addingCall}\n onClick={webinar ? addArbiWebinar : addArbiCall}\n data-testid=\"calendar-editor-add-call\"\n >\n <Video className=\"mr-1 h-4 w-4\" />\n {webinar ? l.addArbiWebinar : l.addArbiCall}\n </Button>\n )}\n {canAddCall && onAddCall && canAddWebinar && (\n <label className=\"flex items-center gap-2 text-sm\">\n <Switch\n checked={webinar}\n onCheckedChange={setWebinar}\n aria-label={l.webinar}\n data-testid=\"calendar-editor-webinar\"\n />\n {l.webinar}\n </label>\n )}\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setLinkInput('')}\n data-testid=\"calendar-editor-add-link\"\n >\n {l.addMeetingLink}\n </Button>\n </div>\n )}\n </FieldRow>\n\n {/* A physical location can be used alone or alongside the audio/video call above. */}\n <FieldRow icon={<MapPin className=\"h-4 w-4\" />}>\n <Input\n aria-label={l.location}\n placeholder=\"Physical location (optional)\"\n value={value.location ?? ''}\n onChange={(e) => set({ location: e.target.value || null })}\n data-testid=\"calendar-editor-location\"\n />\n </FieldRow>\n\n {/* Guests */}\n <FieldRow icon={<Users className=\"h-4 w-4\" />}>\n <Input\n type=\"email\"\n multiple\n aria-label={l.addAttendee}\n placeholder={l.addAttendee}\n value={attendeeInput}\n onChange={(e) => {\n setAttendeeInput(e.target.value)\n onAttendeeQueryChange?.(e.target.value)\n }}\n onKeyDown={onAttendeeKey}\n onBlur={() => {\n if (attendeeInput.trim() && addAttendees(attendeeInput)) setAttendeeInput('')\n }}\n data-testid=\"calendar-editor-attendee-input\"\n />\n {attendeeInput.trim() && (attendeeSuggestions?.length ?? 0) > 0 && (\n <ul\n role=\"listbox\"\n aria-label={l.suggestions}\n className=\"mt-1 max-h-48 overflow-y-auto rounded-md border border-border bg-popover shadow-sm\"\n data-testid=\"calendar-editor-attendee-suggestions\"\n >\n {attendeeSuggestions\n ?.filter(\n (s) =>\n !attendees.some((a) => (a.email ?? '').toLowerCase() === s.email.toLowerCase())\n )\n .slice(0, 8)\n .map((s) => (\n <li key={s.email} role=\"option\" aria-selected={false}>\n <button\n type=\"button\"\n className=\"flex w-full items-baseline gap-2 px-3 py-1.5 text-left text-sm hover:bg-muted\"\n // Keep focus in the input: its blur would otherwise try to add the typed text.\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n set({\n attendees: [\n ...attendees,\n {\n email: s.email,\n name: s.name ?? null,\n role: 'required',\n kind: 'individual',\n },\n ],\n })\n setAttendeeInput('')\n onAttendeeQueryChange?.('')\n }}\n data-testid=\"calendar-editor-attendee-suggestion\"\n >\n <span className=\"truncate font-medium\">{s.name || s.email}</span>\n {s.name && (\n <span className=\"truncate text-xs text-muted-foreground\">{s.email}</span>\n )}\n {s.detail && (\n <span className=\"ml-auto shrink-0 text-xs text-muted-foreground\">\n {s.detail}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>\n )}\n {attendees.length > 0 && (\n <ul className=\"space-y-1\" data-testid=\"calendar-editor-attendees\">\n {attendees.map((a, i) => (\n <li\n key={`${a.email ?? a.user_id ?? i}`}\n className=\"flex items-center gap-2 text-sm\"\n >\n <span className=\"min-w-0 flex-1 truncate\" title={a.email ?? undefined}>\n {a.name || a.email || a.user_id}\n </span>\n <NativeSelect\n aria-label={`${a.email ?? ''} ${l.required}`}\n className=\"h-7 text-xs\"\n value={a.role ?? 'required'}\n onChange={(e) =>\n set({\n attendees: attendees.map((x, j) =>\n j === i ? { ...x, role: e.target.value as AttendeeDraft['role'] } : x\n ),\n })\n }\n >\n <option value=\"required\">{l.required}</option>\n <option value=\"optional\">{l.optional}</option>\n </NativeSelect>\n {isWebinar && (isWebinarAttendee?.(a) ?? true) && (\n <NativeSelect\n aria-label={`${a.email ?? ''} ${l.webinarRole}`}\n className=\"h-7 text-xs\"\n value={roles[attendeeKey(a)] ?? 'attendee'}\n onChange={(e) => setRole(a, e.target.value as WebinarRole)}\n data-testid=\"calendar-editor-webinar-role\"\n >\n <option value=\"cohost\">{l.cohost}</option>\n <option value=\"panelist\">{l.panelist}</option>\n <option value=\"attendee\">{l.webinarAttendee}</option>\n </NativeSelect>\n )}\n <button\n type=\"button\"\n className=\"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={`${l.remove} ${a.email ?? ''}`}\n onClick={() => set({ attendees: attendees.filter((_, j) => j !== i) })}\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </li>\n ))}\n </ul>\n )}\n </FieldRow>\n\n {schedulingSlot && <div className=\"pl-8\">{schedulingSlot}</div>}\n\n {/* Description */}\n <FieldRow icon={<TextAlignStart className=\"h-4 w-4\" />}>\n <Textarea\n aria-label={l.description}\n placeholder={l.description}\n value={value.description ?? ''}\n rows={4}\n onChange={(e) => set({ description: e.target.value || null })}\n data-testid=\"calendar-editor-description\"\n />\n </FieldRow>\n\n {/* Reminders */}\n <FieldRow icon={<Bell className=\"h-4 w-4\" />} label={l.reminders}>\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={!!value.use_default_reminders}\n onChange={(e) => set({ use_default_reminders: e.target.checked })}\n data-testid=\"calendar-editor-default-reminders\"\n />\n {l.useDefaultReminders}\n </label>\n {!value.use_default_reminders && (\n <div className=\"space-y-1.5\">\n {reminders.map((r, i) => {\n const { value: n, unit } = splitReminderMinutes(r.minutes_before)\n return (\n <div\n key={i}\n className=\"flex flex-wrap items-center gap-2 text-sm\"\n data-testid=\"calendar-editor-reminder\"\n >\n <NativeSelect\n aria-label={l.reminders}\n className=\"h-8\"\n value={r.action}\n onChange={(e) =>\n setReminder(i, { ...r, action: e.target.value as ReminderDraft['action'] })\n }\n >\n <option value=\"display\">{l.popup}</option>\n <option value=\"email\">{l.email}</option>\n </NativeSelect>\n <Input\n type=\"number\"\n min={0}\n aria-label={formatReminder(r.minutes_before)}\n className=\"h-8 w-20\"\n value={n}\n onChange={(e) =>\n setReminder(i, {\n ...r,\n minutes_before: reminderToMinutes(\n Math.max(0, Number(e.target.value) || 0),\n unit\n ),\n })\n }\n />\n <NativeSelect\n aria-label={l.minutes}\n className=\"h-8\"\n value={unit}\n onChange={(e) =>\n setReminder(i, {\n ...r,\n minutes_before: reminderToMinutes(n, e.target.value as ReminderUnit),\n })\n }\n >\n <option value=\"minutes\">{l.minutes}</option>\n <option value=\"hours\">{l.hours}</option>\n <option value=\"days\">{l.days}</option>\n <option value=\"weeks\">{l.weeks}</option>\n </NativeSelect>\n <span className=\"text-muted-foreground\">{l.beforeStart}</span>\n <button\n type=\"button\"\n className=\"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={`${l.remove} ${formatReminder(r.minutes_before)}`}\n onClick={() => set({ reminders: reminders.filter((_, j) => j !== i) })}\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )\n })}\n {reminders.length < 5 && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() =>\n set({\n reminders: [\n ...reminders,\n { minutes_before: allDay ? 24 * 60 : 10, action: 'display' },\n ],\n })\n }\n data-testid=\"calendar-editor-add-reminder\"\n >\n <Plus className=\"mr-1 h-4 w-4\" />\n {l.addReminder}\n </Button>\n )}\n </div>\n )}\n </FieldRow>\n\n {/* Show as / visibility / status */}\n <FieldRow icon={<Lock className=\"h-4 w-4\" />}>\n <div className=\"flex flex-wrap gap-2\">\n <NativeSelect\n aria-label={l.showAs}\n value={value.show_as ?? 'busy'}\n onChange={(e) => set({ show_as: e.target.value as ShowAs })}\n data-testid=\"calendar-editor-show-as\"\n >\n {(['busy', 'free', 'tentative', 'oof', 'working_elsewhere'] as ShowAs[]).map((v) => (\n <option key={v} value={v}>\n {showAsLabel(v, l)}\n </option>\n ))}\n </NativeSelect>\n <NativeSelect\n aria-label={l.sensitivity}\n value={value.sensitivity ?? 'normal'}\n onChange={(e) => set({ sensitivity: e.target.value as Sensitivity })}\n data-testid=\"calendar-editor-sensitivity\"\n >\n <option value=\"normal\">{l.normal}</option>\n <option value=\"private\">{l.private}</option>\n <option value=\"confidential\">{l.confidential}</option>\n </NativeSelect>\n <NativeSelect\n aria-label={l.status}\n value={value.status ?? 'confirmed'}\n onChange={(e) => set({ status: e.target.value as EventDraft['status'] })}\n data-testid=\"calendar-editor-status\"\n >\n <option value=\"confirmed\">{l.confirmed}</option>\n <option value=\"tentative\">{l.tentative}</option>\n <option value=\"cancelled\">{l.cancelled}</option>\n </NativeSelect>\n </div>\n <div className=\"flex flex-wrap items-center gap-4 pt-2 text-sm\">\n {value.show_as !== 'oof' && (\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={focus}\n onChange={(e) => {\n setFocus(e.target.checked)\n if (!e.target.checked) set({ auto_decline: false })\n else if (!value.show_as || value.show_as === 'free') set({ show_as: 'busy' })\n }}\n data-testid=\"calendar-editor-focus\"\n />\n {l.focusTime}\n </label>\n )}\n {showDecline && (\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={!!value.auto_decline}\n onChange={(e) => set({ auto_decline: e.target.checked })}\n data-testid=\"calendar-editor-auto-decline\"\n />\n {l.autoDecline}\n </label>\n )}\n </div>\n {showDecline && value.auto_decline && (\n <Input\n className=\"mt-2\"\n aria-label={l.declineMessage}\n placeholder={l.declineMessagePlaceholder}\n value={value.decline_message ?? ''}\n maxLength={1000}\n onChange={(e) => set({ decline_message: e.target.value || null })}\n data-testid=\"calendar-editor-decline-message\"\n />\n )}\n </FieldRow>\n\n {/* Categories */}\n <FieldRow icon={<Tag className=\"h-4 w-4\" />}>\n <div className=\"flex flex-wrap items-center gap-1.5\">\n {categories.map((c) => (\n <Chip\n key={c}\n removeLabel={`${l.remove} ${c}`}\n onRemove={() => set({ categories: categories.filter((x) => x !== c) })}\n >\n {c}\n </Chip>\n ))}\n <Input\n aria-label={l.addCategory}\n placeholder={l.addCategory}\n className=\"h-8 w-40\"\n value={categoryInput}\n onChange={(e) => setCategoryInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault()\n addCategory()\n }\n }}\n onBlur={addCategory}\n data-testid=\"calendar-editor-category-input\"\n />\n </div>\n </FieldRow>\n\n {/* Colour */}\n <FieldRow icon={<Palette className=\"h-4 w-4\" />}>\n <ColorSwatches\n value={value.color ?? null}\n onChange={(c) => set({ color: c })}\n allowNone\n noneLabel={l.defaultColor}\n testIdPrefix=\"calendar-editor-color\"\n />\n {!value.color && calendarColor && <span className=\"sr-only\">{calendarColor}</span>}\n </FieldRow>\n\n {/* Attachments */}\n <EventAttachments\n attachments={value.attachments ?? []}\n documents={attachmentDocuments}\n workspaces={attachmentWorkspaces}\n currentWorkspaceId={currentWorkspaceId}\n onChange={(attachments) => set({ attachments })}\n onUpload={onUploadAttachments}\n labels={l}\n />\n </div>\n\n {(error || shownProblem) && (\n <p\n className=\"px-1 pt-2 text-sm text-destructive\"\n role=\"alert\"\n data-testid=\"calendar-editor-error\"\n >\n {error || (shownProblem === 'invalidRange' ? l.invalidRange : l.titleRequired)}\n </p>\n )}\n <div className=\"flex items-center gap-2 border-t border-border pt-3\">\n {mode === 'edit' && onDelete && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"text-destructive hover:text-destructive\"\n onClick={onDelete}\n data-testid=\"calendar-editor-delete\"\n >\n <Trash2 className=\"mr-1 h-4 w-4\" />\n {l.delete}\n </Button>\n )}\n <div className=\"flex-1\" />\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onCancel}\n data-testid=\"calendar-editor-cancel\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!!saving || problem === 'invalidRange'}\n data-testid=\"calendar-editor-save\"\n >\n {saving ? l.saving : l.save}\n </Button>\n </div>\n </form>\n )\n}\n","/** Read view of one event (popover / side panel): when, where, call, guests, RSVP, edit / delete. */\nimport type { ReactNode } from 'react'\nimport {\n Bell,\n CalendarDays,\n CircleCheck,\n CircleX,\n Clock,\n DoorOpen,\n Lock,\n MapPin,\n Paperclip,\n Pencil,\n Repeat,\n Tag,\n Trash2,\n Users,\n Video,\n X,\n} from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport type { CalendarLabels, EventDetailsProps, PartStat } from './types'\nimport { mergeLabels } from './labels'\nimport { formatReminder } from './reminders'\nimport { formatInZone, safeZone, zoneCity, zoneOffsetLabel } from './zone'\nimport { formatEventWhen } from './format'\nimport { isWebinarConference } from './draft'\n\nconst partstatLabel = (p: PartStat | undefined, l: CalendarLabels): string =>\n ({\n needs_action: l.needsAction,\n accepted: l.accepted,\n declined: l.declined,\n tentative: l.tentative,\n delegated: l.delegated,\n })[p ?? 'needs_action']\n\nfunction Row({ icon, children }: { icon: ReactNode; children: ReactNode }) {\n return (\n <div className=\"flex items-start gap-3 text-sm\">\n <span\n className=\"mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground\"\n aria-hidden\n >\n {icon}\n </span>\n <div className=\"min-w-0 flex-1\">{children}</div>\n </div>\n )\n}\n\nexport function EventDetails({\n event,\n timeZone,\n calendarName,\n calendarColor,\n onEdit,\n onDelete,\n onRespond,\n onProposeTime,\n onJoin,\n onOpenMeetingChat,\n onClose,\n canJoin = true,\n labels: labelOverrides,\n className,\n}: EventDetailsProps) {\n const l = mergeLabels(labelOverrides)\n const zone = safeZone(timeZone)\n const color = event.color || calendarColor || '#3b82f6'\n const restricted = !!event.restricted\n const title = restricted ? l.busy : event.title?.trim() || l.noTitle\n const eventZone = event.start.time_zone\n const otherZone =\n !event.all_day && eventZone && eventZone !== zone ? safeZone(eventZone, zone) : null\n const attendees = event.attendees ?? []\n const counts = attendees.reduce<Record<string, number>>((acc, a) => {\n const k = a.partstat ?? 'needs_action'\n acc[k] = (acc[k] ?? 0) + 1\n return acc\n }, {})\n const canRespond = !!onRespond && !event.is_organizer && event.my_partstat != null && !restricted\n // An invitation in my calendar: its content belongs to the organiser, so no Edit; Delete becomes\n // \"Remove from calendar\" (the server declines on my behalf).\n const invitee = event.is_organizer === false && event.my_partstat != null\n const conference = !restricted ? event.conference : null\n\n return (\n <div className={cn('space-y-3', className)} data-testid=\"calendar-event-details\">\n <div className=\"flex items-start gap-3\">\n <span\n className=\"mt-1.5 h-3 w-3 shrink-0 rounded-sm\"\n style={{ backgroundColor: color }}\n aria-hidden\n />\n <div className=\"min-w-0 flex-1\">\n <h3\n className={cn(\n 'break-words text-lg font-semibold leading-snug',\n event.status === 'cancelled' && 'line-through'\n )}\n data-testid=\"calendar-details-title\"\n >\n {title}\n </h3>\n <div className=\"text-sm text-muted-foreground\" data-testid=\"calendar-details-when\">\n {formatEventWhen(event, zone)}\n </div>\n {otherZone && (\n <div className=\"text-xs text-muted-foreground\">\n {formatInZone(event.start_utc, otherZone, { hour: 'numeric', minute: '2-digit' })} –{' '}\n {formatInZone(event.end_utc, otherZone, { hour: 'numeric', minute: '2-digit' })}{' '}\n {zoneCity(otherZone)} ({zoneOffsetLabel(otherZone, event.start_utc)})\n </div>\n )}\n </div>\n <div className=\"flex shrink-0 items-center\">\n {onEdit && !invitee && event.can_edit !== false && !restricted && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={l.edit}\n onClick={onEdit}\n data-testid=\"calendar-details-edit\"\n >\n <Pencil className=\"h-4 w-4\" />\n </Button>\n )}\n {onDelete && !invitee && event.can_edit !== false && !restricted && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={l.delete}\n onClick={onDelete}\n data-testid=\"calendar-details-delete\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n )}\n {onDelete && invitee && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={l.removeFromCalendar}\n title={l.removeFromCalendar}\n onClick={onDelete}\n data-testid=\"calendar-details-remove\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n )}\n {onClose && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={l.cancel}\n onClick={onClose}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </div>\n\n {event.is_recurring && (\n <Row icon={<Repeat className=\"h-4 w-4\" />}>\n <span className=\"text-muted-foreground\">{l.recurring}</span>\n </Row>\n )}\n\n {conference?.url && (\n <Row icon={<Video className=\"h-4 w-4\" />}>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n disabled={!canJoin}\n onClick={() =>\n onJoin ? onJoin() : window.open(conference.url ?? '', '_blank', 'noopener')\n }\n data-testid=\"calendar-details-join\"\n >\n {isWebinarConference(conference)\n ? l.joinWebinar\n : `${l.join}${conference.type === 'arbi' ? ` ${l.arbiCall}` : ''}`}\n </Button>\n {conference.type === 'arbi' && onOpenMeetingChat && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={onOpenMeetingChat}\n data-testid=\"calendar-details-meeting-chat\"\n >\n {l.openMeetingChat}\n </Button>\n )}\n {conference.type === 'external' && (\n <span className=\"min-w-0 truncate text-xs text-muted-foreground\">\n {conference.url}\n </span>\n )}\n </div>\n </Row>\n )}\n\n {!restricted && event.location && (\n <Row icon={<MapPin className=\"h-4 w-4\" />}>\n <span className=\"break-words\">{event.location}</span>\n </Row>\n )}\n\n {calendarName && (\n <Row icon={<CalendarDays className=\"h-4 w-4\" />}>\n <span>{calendarName}</span>\n </Row>\n )}\n\n {restricted && (\n <Row icon={<Lock className=\"h-4 w-4\" />}>\n <span className=\"text-muted-foreground\">{l.private}</span>\n </Row>\n )}\n\n {!restricted && (event.organizer || attendees.length > 0) && (\n <Row icon={<Users className=\"h-4 w-4\" />}>\n <div className=\"space-y-1\" data-testid=\"calendar-details-attendees\">\n {attendees.length > 0 && (\n <div className=\"text-xs text-muted-foreground\">\n {attendees.length} ·{' '}\n {Object.entries(counts)\n .map(([k, n]) => `${n} ${partstatLabel(k as PartStat, l).toLowerCase()}`)\n .join(', ')}\n </div>\n )}\n {event.organizer && (\n <div className=\"truncate\">\n {event.organizer.name || event.organizer.email}{' '}\n <span className=\"text-xs text-muted-foreground\">· {l.organizer}</span>\n </div>\n )}\n <ul className=\"space-y-0.5\">\n {attendees\n .filter((a) => !a.is_organizer)\n .map((a, i) => (\n <li\n key={`${a.email ?? a.user_id ?? i}`}\n className=\"flex items-center gap-1.5\"\n data-testid=\"calendar-details-attendee\"\n data-partstat={a.partstat ?? 'needs_action'}\n data-kind={a.kind ?? 'individual'}\n >\n {a.partstat === 'accepted' ? (\n <CircleCheck className=\"h-3.5 w-3.5 text-green-600\" aria-label={l.accepted} />\n ) : a.partstat === 'declined' ? (\n <CircleX className=\"h-3.5 w-3.5 text-destructive\" aria-label={l.declined} />\n ) : (\n <Clock\n className=\"h-3.5 w-3.5 text-muted-foreground\"\n aria-label={partstatLabel(a.partstat, l)}\n />\n )}\n {(a.kind === 'room' || a.kind === 'resource') && (\n <DoorOpen className=\"h-3.5 w-3.5 text-muted-foreground\" aria-label={l.room} />\n )}\n <span className=\"min-w-0 truncate\">{a.name || a.email}</span>\n {a.role === 'optional' && (\n <span className=\"text-xs text-muted-foreground\">({l.optional})</span>\n )}\n <span\n className={cn(\n 'ml-auto shrink-0 rounded-full px-1.5 py-0.5 text-[10px]',\n a.partstat === 'accepted'\n ? 'bg-green-500/15 text-green-700 dark:text-green-400'\n : a.partstat === 'declined'\n ? 'bg-destructive/15 text-destructive'\n : 'bg-muted text-muted-foreground'\n )}\n >\n {partstatLabel(a.partstat, l)}\n </span>\n </li>\n ))}\n </ul>\n </div>\n </Row>\n )}\n\n {!restricted && event.description && (\n <div\n className=\"whitespace-pre-wrap break-words rounded-md bg-muted/40 p-2 text-sm\"\n data-testid=\"calendar-details-description\"\n >\n {event.description}\n </div>\n )}\n\n {!restricted && (event.attachments?.length ?? 0) > 0 && (\n <Row icon={<Paperclip className=\"h-4 w-4\" />}>\n <ul className=\"space-y-0.5\">\n {event.attachments?.map((a, i) => (\n <li key={`${a.url}-${i}`}>\n <a\n href={a.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-primary hover:underline\"\n >\n {a.title || a.url}\n </a>\n </li>\n ))}\n </ul>\n </Row>\n )}\n\n {!restricted && (event.categories?.length ?? 0) > 0 && (\n <Row icon={<Tag className=\"h-4 w-4\" />}>\n <div className=\"flex flex-wrap gap-1\">\n {event.categories?.map((c) => (\n <span key={c} className=\"rounded-full bg-muted px-2 py-0.5 text-xs\">\n {c}\n </span>\n ))}\n </div>\n </Row>\n )}\n\n {!restricted && (event.reminders?.length ?? 0) > 0 && (\n <Row icon={<Bell className=\"h-4 w-4\" />}>\n <div className=\"text-muted-foreground\">\n {event.reminders?.map((r) => formatReminder(r.minutes_before)).join(', ')}\n </div>\n </Row>\n )}\n\n {canRespond && (\n <div\n className=\"flex flex-wrap items-center gap-2 border-t border-border pt-3\"\n data-testid=\"calendar-details-rsvp\"\n >\n <span className=\"text-sm text-muted-foreground\">{l.going}</span>\n {(\n [\n ['accepted', l.accept],\n ['declined', l.decline],\n ['tentative', l.maybe],\n ] as const\n ).map(([p, label]) => (\n <Button\n key={p}\n type=\"button\"\n size=\"sm\"\n variant={event.my_partstat === p ? 'default' : 'outline'}\n aria-pressed={event.my_partstat === p}\n onClick={() => onRespond?.(p)}\n data-testid={`calendar-details-rsvp-${p}`}\n >\n {label}\n </Button>\n ))}\n {onProposeTime && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={onProposeTime}\n data-testid=\"calendar-details-propose\"\n >\n {l.proposeNewTime}\n </Button>\n )}\n </div>\n )}\n </div>\n )\n}\n","/** \"This event / this and following / all events\" chooser for edits and deletes of a recurring event. */\nimport { useState } from 'react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@arbidocs/react/ui'\nimport type { EditScope, ScopeDialogProps } from './types'\nimport { mergeLabels } from './labels'\n\nexport function ScopeDialog({\n open,\n action,\n onChoose,\n onCancel,\n allowFollowing = true,\n labels: labelOverrides,\n}: ScopeDialogProps) {\n const l = mergeLabels(labelOverrides)\n const [scope, setScope] = useState<EditScope>('this')\n const options: [EditScope, string][] = [\n ['this', l.scopeThis],\n ...(allowFollowing ? ([['following', l.scopeFollowing]] as [EditScope, string][]) : []),\n ['all', l.scopeAll],\n ]\n const title =\n action === 'edit'\n ? l.scopeEditTitle\n : action === 'respond'\n ? l.scopeRespondTitle\n : l.scopeDeleteTitle\n return (\n <Dialog open={open} onOpenChange={(o) => !o && onCancel()}>\n <DialogContent className=\"max-w-sm\" data-testid=\"calendar-scope-dialog\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription className=\"sr-only\">{title}</DialogDescription>\n </DialogHeader>\n <form\n onSubmit={(e) => {\n e.preventDefault()\n onChoose(scope)\n }}\n >\n <fieldset className=\"space-y-2 py-2\">\n <legend className=\"sr-only\">{title}</legend>\n {options.map(([value, label]) => (\n <label key={value} className=\"flex cursor-pointer items-center gap-2 text-sm\">\n <input\n type=\"radio\"\n name=\"calendar-scope\"\n value={value}\n checked={scope === value}\n onChange={() => setScope(value)}\n data-testid={`calendar-scope-${value}`}\n />\n {label}\n </label>\n ))}\n </fieldset>\n {/* Not DialogFooter: its sticky, negative-margin bar overlapped the last option. */}\n <div className=\"flex justify-end gap-2 pt-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onCancel}\n data-testid=\"calendar-scope-cancel\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n variant={action === 'delete' ? 'destructive' : 'default'}\n data-testid=\"calendar-scope-ok\"\n >\n {action === 'delete' ? l.delete : action === 'respond' ? l.send : l.save}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","/** Layout math for the scheduling assistant: a day window in a zone, and intervals as % positions in it. */\nimport { wallToEpochMs } from './zone'\n\nexport interface DayWindow {\n startMs: number\n endMs: number\n}\n\nconst pad2 = (n: number) => String(n).padStart(2, '0')\n\n/** The shown window of `date` in `zone`, from `startHour` to `endHour` (wall-clock, DST-correct). */\nexport function dayWindow(date: string, zone: string, startHour = 7, endHour = 20): DayWindow {\n const startMs = wallToEpochMs(`${date}T${pad2(startHour)}:00`, zone)\n const endMs =\n endHour >= 24\n ? wallToEpochMs(`${date}T23:59`, zone) + 60_000\n : wallToEpochMs(`${date}T${pad2(endHour)}:00`, zone)\n return { startMs, endMs }\n}\n\nexport interface PlacedInterval {\n leftPct: number\n widthPct: number\n startMs: number\n endMs: number\n}\n\n/** Clip intervals to the window and place them as percentages; intervals outside it are dropped. */\nexport function placeIntervals(\n intervals: { startUtc: string; endUtc: string }[],\n win: DayWindow\n): PlacedInterval[] {\n const span = win.endMs - win.startMs\n if (span <= 0) return []\n const out: PlacedInterval[] = []\n for (const i of intervals) {\n const s = Math.max(Date.parse(i.startUtc), win.startMs)\n const e = Math.min(Date.parse(i.endUtc), win.endMs)\n if (!(e > s)) continue\n out.push({\n startMs: s,\n endMs: e,\n leftPct: ((s - win.startMs) / span) * 100,\n widthPct: ((e - s) / span) * 100,\n })\n }\n return out.sort((a, b) => a.startMs - b.startMs)\n}\n\n/** The parts of the window NOT covered by `working` (shaded as outside working hours). */\nexport function outsideIntervals(\n working: { startUtc: string; endUtc: string }[],\n win: DayWindow\n): PlacedInterval[] {\n const span = win.endMs - win.startMs\n const placed = placeIntervals(working, win)\n const gaps: PlacedInterval[] = []\n let cursor = win.startMs\n for (const w of placed) {\n if (w.startMs > cursor) gaps.push(mk(cursor, w.startMs))\n cursor = Math.max(cursor, w.endMs)\n }\n if (cursor < win.endMs) gaps.push(mk(cursor, win.endMs))\n return gaps\n function mk(s: number, e: number): PlacedInterval {\n return {\n startMs: s,\n endMs: e,\n leftPct: ((s - win.startMs) / span) * 100,\n widthPct: ((e - s) / span) * 100,\n }\n }\n}\n\n/** Hour tick marks (label hour + left %) for the header. */\nexport function hourTicks(\n date: string,\n zone: string,\n startHour: number,\n endHour: number\n): { hour: number; leftPct: number }[] {\n const win = dayWindow(date, zone, startHour, endHour)\n const span = win.endMs - win.startMs\n const ticks: { hour: number; leftPct: number }[] = []\n for (let h = startHour; h < endHour; h++) {\n const ms = wallToEpochMs(`${date}T${pad2(h)}:00`, zone)\n ticks.push({ hour: h, leftPct: ((ms - win.startMs) / span) * 100 })\n }\n return ticks\n}\n","/**\n * Scheduling assistant: one free/busy row per attendee (and room) over a day, working-hours shading,\n * \"availability not shared\" for unknown attendees, the event's slot highlighted, and \"Find a time\"\n * suggestions. Presentational: the host fetches free/busy and suggestions.\n */\nimport { ChevronLeft, ChevronRight, DoorOpen, Sparkles, User } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport type { SchedulingAssistantProps } from './types'\nimport { mergeLabels } from './labels'\nimport { dayWindow, hourTicks, outsideIntervals, placeIntervals } from './scheduling'\nimport { addDays, formatInZone, formatPlainDate, safeZone } from './zone'\n\nexport function SchedulingAssistant({\n date,\n timeZone,\n rows,\n selection,\n dayStartHour = 7,\n dayEndHour = 20,\n loading,\n suggestions,\n finding,\n onFindTime,\n onPickSuggestion,\n onDateChange,\n labels: labelOverrides,\n className,\n}: SchedulingAssistantProps) {\n const l = mergeLabels(labelOverrides)\n const zone = safeZone(timeZone)\n const win = dayWindow(date, zone, dayStartHour, dayEndHour)\n const ticks = hourTicks(date, zone, dayStartHour, dayEndHour)\n const sel = selection ? placeIntervals([selection], win)[0] : undefined\n const time = (iso: string) => formatInZone(iso, zone, { hour: 'numeric', minute: '2-digit' })\n\n return (\n <div className={cn('space-y-2', className)} data-testid=\"calendar-scheduling\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">{l.schedulingAssistant}</span>\n {onDateChange && (\n <div className=\"ml-auto flex items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7\"\n aria-label={l.previous}\n onClick={() => onDateChange(addDays(date, -1))}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <span className=\"text-xs text-muted-foreground\" data-testid=\"calendar-scheduling-date\">\n {formatPlainDate(date, { weekday: 'short', day: 'numeric', month: 'short' })}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7\"\n aria-label={l.next}\n onClick={() => onDateChange(addDays(date, 1))}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n )}\n </div>\n\n <div className={cn('rounded-md border border-border', loading && 'opacity-60')}>\n <div className=\"flex border-b border-border text-[10px] text-muted-foreground\">\n <div className=\"w-32 shrink-0 sm:w-40\" />\n <div className=\"relative h-5 flex-1\">\n {ticks.map((t) => (\n <span\n key={t.hour}\n className=\"absolute top-0.5 -translate-x-1/2\"\n style={{ left: `${t.leftPct}%` }}\n >\n {t.hour}\n </span>\n ))}\n </div>\n </div>\n {rows.map((row) => (\n <div\n key={row.id}\n className=\"flex items-stretch border-b border-border last:border-b-0\"\n data-testid=\"calendar-scheduling-row\"\n data-known={row.known}\n >\n <div className=\"flex w-32 shrink-0 items-center gap-1.5 truncate px-2 py-1 text-xs sm:w-40\">\n {row.kind === 'room' ? (\n <DoorOpen\n className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\"\n aria-label={l.room}\n />\n ) : (\n <User className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" aria-hidden />\n )}\n <span className=\"truncate\" title={row.label}>\n {row.label}\n </span>\n </div>\n <div className=\"relative h-7 flex-1 overflow-hidden\">\n {!row.known ? (\n <div\n className=\"absolute inset-0 flex items-center justify-center bg-[repeating-linear-gradient(45deg,transparent,transparent_4px,hsl(var(--muted))_4px,hsl(var(--muted))_8px)] text-[10px] text-muted-foreground\"\n title={l.unknownAvailability}\n >\n {l.unknownAvailability}\n </div>\n ) : (\n <>\n {row.working &&\n outsideIntervals(row.working, win).map((g, i) => (\n <div\n key={`o${i}`}\n className=\"absolute inset-y-0 bg-muted\"\n style={{ left: `${g.leftPct}%`, width: `${g.widthPct}%` }}\n title={l.outsideWorkingHours}\n data-testid=\"calendar-scheduling-outside\"\n />\n ))}\n {placeIntervals(row.busy, win).map((b, i) => {\n const src = row.busy.find(\n (x) =>\n Math.max(Date.parse(x.startUtc), win.startMs) === b.startMs &&\n Math.min(Date.parse(x.endUtc), win.endMs) === b.endMs\n )\n const tentative = src?.showAs === 'tentative'\n const oof = src?.showAs === 'oof'\n return (\n <div\n key={`b${i}`}\n className={cn(\n 'absolute inset-y-1 rounded-sm',\n oof ? 'bg-purple-500/70' : tentative ? 'bg-primary/35' : 'bg-primary/75'\n )}\n style={{ left: `${b.leftPct}%`, width: `${Math.max(b.widthPct, 0.5)}%` }}\n title={`${src?.title ? `${src.title} · ` : ''}${time(new Date(b.startMs).toISOString())} – ${time(new Date(b.endMs).toISOString())}`}\n data-testid=\"calendar-scheduling-busy\"\n />\n )\n })}\n </>\n )}\n {sel && (\n <div\n className=\"pointer-events-none absolute inset-y-0 border-x-2 border-green-600 bg-green-500/15\"\n style={{ left: `${sel.leftPct}%`, width: `${sel.widthPct}%` }}\n aria-hidden\n />\n )}\n </div>\n </div>\n ))}\n </div>\n\n {onFindTime && (\n <div className=\"space-y-1.5\">\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={onFindTime}\n disabled={finding}\n data-testid=\"calendar-find-time\"\n >\n <Sparkles className=\"mr-1 h-4 w-4\" />\n {finding ? l.findingTimes : l.findATime}\n </Button>\n {suggestions && suggestions.length === 0 && (\n <p className=\"text-xs text-muted-foreground\">{l.noSuggestions}</p>\n )}\n {suggestions && suggestions.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\" data-testid=\"calendar-suggestions\">\n {suggestions.map((s) => (\n <button\n key={s.startUtc}\n type=\"button\"\n onClick={() => onPickSuggestion?.(s)}\n className=\"rounded-md border border-border px-2 py-1 text-left text-xs hover:bg-muted\"\n data-testid=\"calendar-suggestion\"\n >\n <div className=\"font-medium\">\n {formatInZone(s.startUtc, zone, {\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n })}{' '}\n {time(s.startUtc)} – {time(s.endUtc)}\n </div>\n <div className=\"text-muted-foreground\">\n {s.unavailable.length === 0\n ? l.everyoneFree\n : `${s.unavailable.length} ${l.unavailableCount}`}\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n","/** Per-user calendar settings (mirrors the API `CalendarSettings`). Controlled. */\nimport { useId, type ReactNode } from 'react'\nimport { Button, Input, Switch, Textarea, cn } from '@arbidocs/react/ui'\nimport type {\n CalendarLabels,\n CalendarSettingsFormProps,\n CalendarSettingsValue,\n CalendarViewKind,\n CalendarWorkingHours,\n OverlayLayer,\n} from './types'\nimport { mergeLabels } from './labels'\nimport { TimeZonePicker } from './TimeZonePicker'\nimport { NativeSelect } from './ui'\nimport { formatPlainDate } from './zone'\n\n/** Day name for a working-hours day (0 = Monday). 2024-01-01 is a Monday. */\nconst mondayFirstName = (day: number) => formatPlainDate(`2024-01-0${day + 1}`, { weekday: 'long' })\n/** Day name for week_start (0 = Sunday). 2023-12-31 is a Sunday. */\nconst sundayFirstName = (day: number) =>\n formatPlainDate(day === 0 ? '2023-12-31' : `2024-01-0${day}`, { weekday: 'long' })\n\nconst VIEWS: CalendarViewKind[] = ['day', 'work_week', 'week', 'month', 'agenda', 'year']\nconst DURATIONS = [15, 30, 45, 60, 90, 120]\n\nconst viewName = (v: CalendarViewKind, l: CalendarLabels) =>\n ({\n day: l.day,\n week: l.week,\n work_week: l.workWeek,\n month: l.month,\n agenda: l.agenda,\n year: l.year,\n })[v]\n\nfunction Field({\n label,\n htmlFor,\n children,\n}: {\n label: string\n htmlFor?: string\n children: ReactNode\n}) {\n return (\n <div className=\"grid gap-1.5 sm:grid-cols-[12rem_1fr] sm:items-center\">\n <label htmlFor={htmlFor} className=\"text-sm font-medium\">\n {label}\n </label>\n <div className=\"min-w-0\">{children}</div>\n </div>\n )\n}\n\nexport function CalendarSettingsForm({\n value,\n onChange,\n onSave,\n onCancel,\n calendars,\n zones,\n saving,\n error,\n labels: labelOverrides,\n className,\n}: CalendarSettingsFormProps) {\n const l = mergeLabels(labelOverrides)\n const uid = useId()\n const set = (patch: Partial<CalendarSettingsValue>) => onChange({ ...value, ...patch })\n const hoursFor = (day: number): CalendarWorkingHours | undefined =>\n value.working_hours.find((h) => h.day === day)\n const setHours = (day: number, patch: Partial<CalendarWorkingHours> | null) => {\n const rest = value.working_hours.filter((h) => h.day !== day)\n if (patch === null) return set({ working_hours: rest })\n const cur = hoursFor(day) ?? { day, start: '09:00', end: '17:00' }\n set({ working_hours: [...rest, { ...cur, ...patch }].sort((a, b) => a.day - b.day) })\n }\n const overlays = value.overlays ?? []\n const toggleOverlay = (o: OverlayLayer) =>\n set({ overlays: overlays.includes(o) ? overlays.filter((x) => x !== o) : [...overlays, o] })\n const writable = (calendars ?? []).filter((c) => c.canWrite && !c.locked)\n\n return (\n <form\n className={cn('space-y-5', className)}\n onSubmit={(e) => {\n e.preventDefault()\n onSave()\n }}\n data-testid=\"calendar-settings-form\"\n aria-label={l.settingsTitle}\n >\n <Field label={l.timeZone}>\n <TimeZonePicker\n value={value.time_zone}\n zones={zones}\n labels={labelOverrides}\n className=\"w-full sm:w-80\"\n onChange={(z) => set({ time_zone: z })}\n />\n </Field>\n <Field label={l.secondaryTimeZone}>\n <TimeZonePicker\n value={value.secondary_time_zone ?? null}\n zones={zones}\n allowNone\n ariaLabel={l.secondaryTimeZone}\n labels={labelOverrides}\n className=\"w-full sm:w-80\"\n onChange={(z) => set({ secondary_time_zone: z })}\n onClear={() => set({ secondary_time_zone: null })}\n />\n </Field>\n <Field label={l.weekStart} htmlFor={`${uid}-week-start`}>\n <NativeSelect\n id={`${uid}-week-start`}\n value={value.week_start}\n onChange={(e) => set({ week_start: Number(e.target.value) })}\n data-testid=\"calendar-settings-week-start\"\n >\n {[1, 0, 6].map((d) => (\n <option key={d} value={d}>\n {sundayFirstName(d)}\n </option>\n ))}\n </NativeSelect>\n </Field>\n <Field label={l.defaultView} htmlFor={`${uid}-view`}>\n <NativeSelect\n id={`${uid}-view`}\n value={value.default_view}\n onChange={(e) => set({ default_view: e.target.value as CalendarViewKind })}\n data-testid=\"calendar-settings-default-view\"\n >\n {VIEWS.map((v) => (\n <option key={v} value={v}>\n {viewName(v, l)}\n </option>\n ))}\n </NativeSelect>\n </Field>\n <Field label={l.defaultDuration} htmlFor={`${uid}-duration`}>\n <NativeSelect\n id={`${uid}-duration`}\n value={value.default_duration_minutes}\n onChange={(e) => set({ default_duration_minutes: Number(e.target.value) })}\n data-testid=\"calendar-settings-duration\"\n >\n {Array.from(new Set([...DURATIONS, value.default_duration_minutes]))\n .sort((a, b) => a - b)\n .map((m) => (\n <option key={m} value={m}>\n {`${m} ${l.minutes}`}\n </option>\n ))}\n </NativeSelect>\n </Field>\n {writable.length > 0 && (\n <Field label={l.defaultCalendar} htmlFor={`${uid}-calendar`}>\n <NativeSelect\n id={`${uid}-calendar`}\n value={value.default_calendar_id ?? ''}\n onChange={(e) => set({ default_calendar_id: e.target.value || null })}\n data-testid=\"calendar-settings-default-calendar\"\n >\n <option value=\"\">—</option>\n {writable.map((c) => (\n <option key={c.id} value={c.id}>\n {c.name ?? c.id}\n </option>\n ))}\n </NativeSelect>\n </Field>\n )}\n\n <fieldset className=\"space-y-2\">\n <legend className=\"pb-1 text-sm font-medium\">{l.workingHours}</legend>\n {[0, 1, 2, 3, 4, 5, 6].map((day) => {\n const h = hoursFor(day)\n return (\n <div\n key={day}\n className=\"flex flex-wrap items-center gap-2 text-sm\"\n data-testid={`calendar-settings-hours-${day}`}\n >\n <label className=\"flex w-36 items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={!!h}\n onChange={(e) => setHours(day, e.target.checked ? {} : null)}\n />\n {mondayFirstName(day)}\n </label>\n {h && (\n <>\n <Input\n type=\"time\"\n className=\"h-8 w-28\"\n aria-label={`${mondayFirstName(day)} ${l.start}`}\n value={h.start}\n onChange={(e) => e.target.value && setHours(day, { start: e.target.value })}\n />\n <span className=\"text-muted-foreground\">–</span>\n <Input\n type=\"time\"\n className=\"h-8 w-28\"\n aria-label={`${mondayFirstName(day)} ${l.end}`}\n value={h.end === '24:00' ? '23:59' : h.end}\n onChange={(e) => e.target.value && setHours(day, { end: e.target.value })}\n />\n </>\n )}\n </div>\n )\n })}\n </fieldset>\n\n <div className=\"space-y-3\">\n {(\n [\n ['show_week_numbers', l.showWeekNumbers],\n ['show_declined', l.showDeclined],\n ] as const\n ).map(([key, label]) => (\n <label\n key={key}\n className=\"flex items-center justify-between gap-4 text-sm sm:justify-start\"\n >\n <span className=\"sm:w-48\">{label}</span>\n <Switch\n checked={!!value[key]}\n onCheckedChange={(on) => set({ [key]: on } as Partial<CalendarSettingsValue>)}\n aria-label={label}\n data-testid={`calendar-settings-${key}`}\n />\n </label>\n ))}\n </div>\n\n <Field label={l.autoAddInvitations} htmlFor={`${uid}-auto-add`}>\n <NativeSelect\n id={`${uid}-auto-add`}\n value={value.auto_add_invitations ?? 'all'}\n onChange={(e) =>\n set({\n auto_add_invitations: e.target.value as CalendarSettingsValue['auto_add_invitations'],\n })\n }\n data-testid=\"calendar-settings-auto-add\"\n >\n <option value=\"all\">{l.autoAddAll}</option>\n <option value=\"known\">{l.autoAddKnown}</option>\n <option value=\"none\">{l.autoAddNone}</option>\n </NativeSelect>\n </Field>\n\n <fieldset className=\"space-y-1.5\">\n <legend className=\"pb-1 text-sm font-medium\">{l.overlays}</legend>\n {(\n [\n ['facts', l.facts],\n ['workflows', l.workflows],\n ['tasks', l.tasks],\n ] as const\n ).map(([o, label]) => (\n <label key={o} className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={overlays.includes(o)}\n onChange={() => toggleOverlay(o)}\n data-testid={`calendar-settings-overlay-${o}`}\n />\n {label}\n </label>\n ))}\n </fieldset>\n\n <div className=\"space-y-1.5\">\n <label htmlFor={`${uid}-decline`} className=\"text-sm font-medium\">\n {l.declineMessage}\n </label>\n <Textarea\n id={`${uid}-decline`}\n rows={2}\n maxLength={1000}\n value={value.decline_message ?? ''}\n onChange={(e) => set({ decline_message: e.target.value || null })}\n />\n </div>\n\n {error && (\n <p className=\"text-sm text-destructive\" role=\"alert\">\n {error}\n </p>\n )}\n <div className=\"flex justify-end gap-2\">\n {onCancel && (\n <Button type=\"button\" variant=\"outline\" onClick={onCancel}>\n {l.cancel}\n </Button>\n )}\n <Button type=\"submit\" disabled={!!saving} data-testid=\"calendar-settings-save\">\n {saving ? l.saving : l.save}\n </Button>\n </div>\n </form>\n )\n}\n","/** Pure layout helpers for the calendar print view: ranges and zone-correct day bucketing. */\nimport type { components } from '@arbidocs/client'\nimport { addDays, addMonths, dayOfWeekSun0, formatPlainDate, startOfWeek, utcToDate } from './zone'\n\nexport type CalendarEvent = components['schemas']['CalendarEvent']\n\nexport type PrintView = 'agenda' | 'day' | 'week' | 'month'\n\n/** The days [from, to) a view covers. */\nexport function printRange(\n view: PrintView,\n date: string,\n weekStart = 1,\n agendaDays = 30\n): { from: string; to: string } {\n if (view === 'day') return { from: date, to: addDays(date, 1) }\n if (view === 'agenda') return { from: date, to: addDays(date, agendaDays) }\n if (view === 'week') {\n const from = startOfWeek(date, weekStart)\n return { from, to: addDays(from, 7) }\n }\n const first = `${date.slice(0, 8)}01`\n const from = startOfWeek(first, weekStart)\n const nextMonth = addMonths(first, 1)\n const lead = (dayOfWeekSun0(nextMonth) - weekStart + 7) % 7\n const to = lead === 0 ? nextMonth : addDays(nextMonth, 7 - lead)\n return { from, to }\n}\n\nexport function eachDay(from: string, to: string): string[] {\n const out: string[] = []\n for (let d = from; d < to; d = addDays(d, 1)) out.push(d)\n return out\n}\n\n/** Zone days an event touches (all-day: its dates; timed: the zone dates of [start, end)). */\nexport function eventDays(e: CalendarEvent, zone: string): string[] {\n if (e.all_day) {\n const start = e.start.date ?? utcToDate(e.start_utc, 'UTC')\n const endExcl = e.end.date ?? addDays(start, 1)\n return eachDay(start, endExcl > start ? endExcl : addDays(start, 1))\n }\n const startDay = utcToDate(e.start_utc, zone)\n const lastInstant = new Date(\n Math.max(new Date(e.start_utc).getTime(), new Date(e.end_utc).getTime() - 1)\n )\n const endDay = utcToDate(lastInstant, zone)\n return eachDay(startDay, addDays(endDay, 1))\n}\n\nexport function timeLabel(e: CalendarEvent, day: string, zone: string): string {\n if (e.all_day) return 'All day'\n const fmt = new Intl.DateTimeFormat(undefined, {\n timeZone: zone,\n hour: 'numeric',\n minute: '2-digit',\n })\n const sDay = utcToDate(e.start_utc, zone)\n const eDay = utcToDate(new Date(new Date(e.end_utc).getTime() - 1), zone)\n const s = sDay === day ? fmt.format(new Date(e.start_utc)) : '…'\n const en = eDay === day ? fmt.format(new Date(e.end_utc)) : '…'\n return `${s} – ${en}`\n}\n\n/** Events per zone day within [from, to), all-day first then by start. */\nexport function eventsByDay(\n events: CalendarEvent[],\n zone: string,\n from: string,\n to: string\n): Map<string, CalendarEvent[]> {\n const map = new Map<string, CalendarEvent[]>()\n for (const e of events) {\n for (const d of eventDays(e, zone)) {\n if (d < from || d >= to) continue\n const list = map.get(d) ?? []\n list.push(e)\n map.set(d, list)\n }\n }\n for (const list of map.values())\n list.sort(\n (a, b) =>\n Number(b.all_day) - Number(a.all_day) ||\n new Date(a.start_utc).getTime() - new Date(b.start_utc).getTime() ||\n a.title.localeCompare(b.title)\n )\n return map\n}\n\nexport function heading(view: PrintView, date: string, from: string, to: string): string {\n const last = addDays(to, -1)\n if (view === 'day')\n return formatPlainDate(from, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n })\n if (view === 'month')\n return formatPlainDate(`${date.slice(0, 7)}-15`, { year: 'numeric', month: 'long' })\n const opts: Intl.DateTimeFormatOptions = { year: 'numeric', month: 'short', day: 'numeric' }\n return `${formatPlainDate(from, opts)} – ${formatPlainDate(last, opts)}`\n}\n","/**\n * Printable calendar (agenda / day / week / month) rendered from already-fetched events, zone-correct in\n * `timeZone`. `printCalendar(props)` renders it into a body-level host and opens the browser print dialog with\n * only that view visible.\n */\nimport { detectTimeZone, formatPlainDate, safeZone } from './zone'\nimport {\n eachDay,\n eventsByDay,\n heading,\n printRange,\n timeLabel,\n type CalendarEvent,\n type PrintView,\n} from './print-layout'\n\nexport interface PrintCalendarInfo {\n id: string\n name?: string | null\n color?: string | null\n}\n\nexport interface CalendarPrintProps {\n events: CalendarEvent[]\n view: PrintView\n /** Anchor date YYYY-MM-DD (the day, a day in the week / month, or the agenda's first day). */\n date: string\n timeZone: string\n /** 0 = Sunday … 6 = Saturday (calendar settings `week_start`). Default 1 (Monday). */\n weekStart?: number\n /** Agenda length in days. Default 30. */\n agendaDays?: number\n /** Heading; defaults to a description of the range. */\n title?: string\n calendars?: PrintCalendarInfo[]\n}\n\nconst STYLE = `\n.arbi-calendar-print { color: #111; background: #fff; font: 12px/1.4 system-ui, -apple-system, 'Segoe UI', sans-serif; }\n.arbi-calendar-print h1 { font-size: 18px; margin: 0 0 8px; }\n.arbi-calendar-print .acp-zone { color: #555; font-size: 11px; margin-bottom: 12px; }\n.arbi-calendar-print table { border-collapse: collapse; width: 100%; table-layout: fixed; }\n.arbi-calendar-print th, .arbi-calendar-print td { border: 1px solid #bbb; padding: 4px; vertical-align: top; text-align: left; }\n.arbi-calendar-print th { background: #f3f3f3; font-weight: 600; }\n.arbi-calendar-print .acp-day { break-inside: avoid; margin-bottom: 10px; }\n.arbi-calendar-print .acp-day h2 { font-size: 13px; margin: 0 0 4px; border-bottom: 1px solid #bbb; padding-bottom: 2px; }\n.arbi-calendar-print .acp-ev { display: flex; gap: 6px; margin: 2px 0; break-inside: avoid; }\n.arbi-calendar-print .acp-time { flex: 0 0 auto; min-width: 92px; color: #333; font-variant-numeric: tabular-nums; }\n.arbi-calendar-print .acp-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 4px; vertical-align: middle; print-color-adjust: exact; -webkit-print-color-adjust: exact; }\n.arbi-calendar-print .acp-meta { color: #555; font-size: 11px; white-space: pre-line; }\n.arbi-calendar-print .acp-muted { color: #888; }\n.arbi-calendar-print .acp-cancelled { text-decoration: line-through; color: #888; }\n.arbi-calendar-print .acp-month td { height: 90px; }\n.arbi-calendar-print .acp-month .acp-out { color: #aaa; }\n.arbi-calendar-print .acp-cell-ev { font-size: 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n@media print {\n @page { margin: 12mm; }\n body.arbi-printing-calendar > *:not(.arbi-calendar-print-host) { display: none !important; }\n body.arbi-printing-calendar .arbi-calendar-print-host { display: block !important; }\n body.arbi-printing-calendar .arbi-calendar-print { display: block !important; }\n}\n`\nexport function CalendarPrint({\n events,\n view,\n date,\n timeZone,\n weekStart = 1,\n agendaDays = 30,\n title,\n calendars,\n}: CalendarPrintProps) {\n const zone = safeZone(timeZone, detectTimeZone())\n const { from, to } = printRange(view, date, weekStart, agendaDays)\n const byDay = eventsByDay(events, zone, from, to)\n const color = (e: CalendarEvent) =>\n e.color || calendars?.find((c) => c.id === e.calendar_id)?.color || '#3b82f6'\n const label = (e: CalendarEvent) => (e.restricted && !e.title ? 'Busy' : e.title || '(no title)')\n\n const evLine = (e: CalendarEvent, day: string, details: boolean) => (\n <div key={`${e.instance_id}-${day}`} className=\"acp-ev\" data-testid=\"calendar-print-event\">\n <span className=\"acp-time\">{timeLabel(e, day, zone)}</span>\n <span>\n <span className=\"acp-dot\" style={{ background: color(e) }} />\n <span className={e.status === 'cancelled' ? 'acp-cancelled' : undefined}>{label(e)}</span>\n {details && e.location && <div className=\"acp-meta\">{e.location}</div>}\n {details && e.description && <div className=\"acp-meta\">{e.description.slice(0, 500)}</div>}\n </span>\n </div>\n )\n\n let body: React.ReactNode\n if (view === 'agenda' || view === 'day') {\n const days = view === 'day' ? [from] : eachDay(from, to).filter((d) => byDay.has(d))\n body = days.length ? (\n days.map((d) => (\n <section key={d} className=\"acp-day\">\n <h2>{formatPlainDate(d, { weekday: 'long', month: 'long', day: 'numeric' })}</h2>\n {(byDay.get(d) ?? []).map((e) => evLine(e, d, true))}\n {!byDay.get(d)?.length && <div className=\"acp-muted\">No events</div>}\n </section>\n ))\n ) : (\n <p className=\"acp-muted\">No events</p>\n )\n } else if (view === 'week') {\n const days = eachDay(from, to)\n body = (\n <table>\n <thead>\n <tr>\n {days.map((d) => (\n <th key={d}>\n {formatPlainDate(d, { weekday: 'short', day: 'numeric', month: 'short' })}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n <tr>\n {days.map((d) => (\n <td key={d} style={{ height: 480 }}>\n {(byDay.get(d) ?? []).map((e) => evLine(e, d, false))}\n </td>\n ))}\n </tr>\n </tbody>\n </table>\n )\n } else {\n const days = eachDay(from, to)\n const weeks: string[][] = []\n for (let i = 0; i < days.length; i += 7) weeks.push(days.slice(i, i + 7))\n const month = date.slice(0, 7)\n body = (\n <table className=\"acp-month\">\n <thead>\n <tr>\n {weeks[0].map((d) => (\n <th key={d}>{formatPlainDate(d, { weekday: 'short' })}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeks.map((w) => (\n <tr key={w[0]}>\n {w.map((d) => (\n <td key={d} className={d.slice(0, 7) === month ? undefined : 'acp-out'}>\n <div>{Number(d.slice(8))}</div>\n {(byDay.get(d) ?? []).slice(0, 6).map((e) => (\n <div\n key={`${e.instance_id}-${d}`}\n className=\"acp-cell-ev\"\n data-testid=\"calendar-print-event\"\n >\n <span className=\"acp-dot\" style={{ background: color(e) }} />\n {!e.all_day && `${timeLabel(e, d, zone).split(' – ')[0]} `}\n {label(e)}\n </div>\n ))}\n {(byDay.get(d)?.length ?? 0) > 6 && (\n <div className=\"acp-cell-ev acp-muted\">\n +{(byDay.get(d)?.length ?? 0) - 6} more\n </div>\n )}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n )\n }\n\n return (\n <div className=\"arbi-calendar-print\" data-testid=\"calendar-print\">\n <style>{STYLE}</style>\n <h1>{title ?? heading(view, date, from, to)}</h1>\n <div className=\"acp-zone\">Times in {zone.replace(/_/g, ' ')}</div>\n {body}\n </div>\n )\n}\n","import { flushSync } from 'react-dom'\nimport { createRoot } from 'react-dom/client'\nimport { CalendarPrint, type CalendarPrintProps } from './CalendarPrint'\n\n/**\n * Open the browser print dialog showing only the calendar print view, rendered into a temporary\n * body-level host.\n */\nexport function printCalendar(props: CalendarPrintProps): void {\n const host = document.createElement('div')\n host.className = 'arbi-calendar-print-host'\n host.style.display = 'none'\n document.body.appendChild(host)\n const root = createRoot(host)\n flushSync(() => root.render(<CalendarPrint {...props} />))\n document.body.classList.add('arbi-printing-calendar')\n let done = false\n const cleanup = () => {\n if (done) return\n done = true\n window.removeEventListener('afterprint', cleanup)\n document.body.classList.remove('arbi-printing-calendar')\n root.unmount()\n host.remove()\n }\n window.addEventListener('afterprint', cleanup)\n try {\n window.print()\n } finally {\n // Browsers without afterprint still get cleaned up (print() blocks there).\n if (!('onafterprint' in window)) setTimeout(cleanup, 1000)\n }\n}\n","/**\n * Public booking slots (UTC instants) grouped by day in the VISITOR's zone, DST-correct. The\n * visitor's zone defaults to `detectTimeZone()`; an unknown zone falls back to it.\n */\nimport {\n detectTimeZone,\n formatInZone,\n formatPlainDate,\n listTimeZones,\n safeZone,\n utcToDate,\n} from './zone'\n\nexport interface SlotView {\n /** ISO instant to send back as `start` */\n start: string\n /** Wall time in the visitor's zone, e.g. \"9:00 AM\" */\n label: string\n}\n\nexport interface SlotDay {\n /** YYYY-MM-DD in the visitor's zone */\n date: string\n /** e.g. \"Monday, November 2\" */\n label: string\n slots: SlotView[]\n}\n\nexport function formatSlotTime(instant: string, zone: string, locale?: string): string {\n return formatInZone(instant, zone, { hour: 'numeric', minute: '2-digit' }, locale)\n}\n\n/** A YYYY-MM-DD date as a weekday + day label. */\nexport function formatDayLabel(date: string, locale?: string): string {\n return formatPlainDate(date, { weekday: 'long', month: 'long', day: 'numeric' }, locale)\n}\n\nexport function groupSlotsByDay(\n slots: readonly string[],\n zone: string,\n locale?: string\n): SlotDay[] {\n const tz = safeZone(zone, detectTimeZone())\n const byDay = new Map<string, SlotView[]>()\n const sorted = [...slots].sort((a, b) => new Date(a).getTime() - new Date(b).getTime())\n for (const start of sorted) {\n const date = utcToDate(start, tz)\n const list = byDay.get(date) ?? []\n list.push({ start, label: formatSlotTime(start, tz, locale) })\n byDay.set(date, list)\n }\n return [...byDay.entries()].map(([date, list]) => ({\n date,\n label: formatDayLabel(date, locale),\n slots: list,\n }))\n}\n\n/** \"Monday, November 2, 9:00 – 9:30 AM (Europe/Berlin)\"-style range for the confirmation. */\nexport function formatSlotRange(start: string, end: string, zone: string, locale?: string): string {\n const tz = safeZone(zone, detectTimeZone())\n const fmt = new Intl.DateTimeFormat(locale, {\n timeZone: tz,\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n })\n const s = new Date(start)\n const e = new Date(end)\n const range = (fmt as Intl.DateTimeFormat & { formatRange?: (a: Date, b: Date) => string })\n .formatRange\n const text = range\n ? range.call(fmt, s, e)\n : `${fmt.format(s)} – ${formatSlotTime(end, tz, locale)}`\n return `${text} (${tz.replace(/_/g, ' ')})`\n}\n\n/** The zones a visitor can pick from, with `current` always among them. */\nexport function zoneOptions(current: string): string[] {\n const zones = listTimeZones()\n return zones.includes(current) ? zones : [current, ...zones]\n}\n","/** API → calendar-block shapes: events and overlay items to `GridEvent`, calendars to `CalendarListItem`. */\nimport type { CalendarEvent, CalendarRead, OverlayItem } from '@arbidocs/react'\nimport { draftRangeUtc } from './draft'\nimport type { CalendarListItem, EventDraft, GridEvent } from './types'\nimport { addDays, utcToDate } from './zone'\n\nexport const DEFAULT_EVENT_COLOR = '#3b82f6'\n\nexport const OVERLAY_COLORS: Record<OverlayItem['layer'], string> = {\n facts: '#a855f7',\n workflows: '#14b8a6',\n tasks: '#f59e0b',\n}\n\nexport function eventToGrid(event: CalendarEvent, calendar?: CalendarRead | null): GridEvent {\n return {\n instanceId: event.instance_id,\n eventId: event.id,\n calendarId: event.calendar_id,\n title: event.title,\n startUtc: event.start_utc,\n endUtc: event.end_utc,\n allDay: !!event.all_day,\n startDate: event.all_day ? (event.start.date ?? undefined) : undefined,\n endDate: event.all_day ? (event.end.date ?? undefined) : undefined,\n color: event.color || calendar?.color || DEFAULT_EVENT_COLOR,\n editable: !!event.can_edit && !event.restricted,\n layer: 'event',\n status: event.status,\n myPartstat: event.my_partstat ?? null,\n showAs: event.show_as,\n isRecurring: !!event.is_recurring || !!event.recurrence_id,\n hasConference: !!event.conference,\n location: event.location ?? null,\n restricted: !!event.restricted,\n }\n}\n\nexport function overlayToGrid(item: OverlayItem, zone: string): GridEvent {\n const allDay = !!item.all_day\n let startDate: string | undefined\n let endDate: string | undefined\n if (allDay) {\n const z = item.time_zone || zone\n startDate = utcToDate(item.start_utc, z)\n endDate = utcToDate(item.end_utc, z)\n if (endDate <= startDate) endDate = addDays(startDate, 1)\n }\n return {\n instanceId: `${item.layer}:${item.instance_id}`,\n eventId: item.id,\n title: item.title,\n startUtc: item.start_utc,\n endUtc: item.end_utc,\n allDay,\n startDate,\n endDate,\n color: OVERLAY_COLORS[item.layer],\n editable: false,\n layer: item.layer,\n }\n}\n\n/** Calendar events + overlays, with hidden calendars (and declined events unless shown) left out. */\nexport function buildGridEvents(\n events: CalendarEvent[] | undefined,\n calendars: CalendarRead[] | undefined,\n overlays: OverlayItem[] | undefined,\n { zone, showDeclined }: { zone: string; showDeclined: boolean }\n): GridEvent[] {\n const byId = new Map((calendars ?? []).map((c) => [c.id, c]))\n const out: GridEvent[] = []\n for (const e of events ?? []) {\n const cal = byId.get(e.calendar_id)\n if (cal?.hidden) continue\n if (!showDeclined && e.my_partstat === 'declined') continue\n out.push(eventToGrid(e, cal))\n }\n for (const o of overlays ?? []) out.push(overlayToGrid(o, zone))\n return out\n}\n\nexport function calendarGroup(c: CalendarRead): CalendarListItem['group'] {\n if (c.kind === 'resource') return 'rooms'\n if (c.workspace_id) return 'workspace'\n if (c.kind === 'subscription' || c.kind === 'holidays') return 'subscribed'\n return c.role === 'owner' ? 'mine' : 'shared'\n}\n\nexport function calendarToListItem(c: CalendarRead): CalendarListItem {\n return {\n id: c.id,\n name: c.name ?? null,\n color: c.color,\n hidden: !!c.hidden,\n locked: !!c.locked,\n role: c.role,\n isDefault: !!c.is_default,\n group: calendarGroup(c),\n canWrite: !!c.can_write,\n provider: c.provider && c.provider !== 'native' ? c.provider : null,\n }\n}\n\n/** Where an overlay item's `link` (`fact:…`, `workflow:…`, `conversation:…`) points. */\nexport function parseOverlayLink(\n link: string | null | undefined\n): { kind: 'fact' | 'workflow' | 'conversation'; id: string } | null {\n const m = /^(fact|workflow|conversation):([A-Za-z0-9_-]+)$/.exec(link ?? '')\n return m ? { kind: m[1] as 'fact' | 'workflow' | 'conversation', id: m[2] } : null\n}\n\nexport const PENDING_EVENT_COLOR = '#94a3b8'\n\n/** A create waiting in the offline outbox, drawn as a read-only pending event. */\nexport function pendingCreateToGrid(\n requestId: string,\n draft: EventDraft,\n zone: string\n): GridEvent | null {\n if (!draft?.start) return null\n const allDay = !!draft.start.date\n let startUtc: string\n let endUtc: string\n try {\n const { startMs, endMs } = draftRangeUtc(draft, zone)\n if (!Number.isFinite(startMs)) return null\n startUtc = new Date(startMs).toISOString()\n endUtc = new Date(\n Number.isFinite(endMs) && endMs > startMs ? endMs : startMs + 30 * 60_000\n ).toISOString()\n } catch {\n return null\n }\n return {\n instanceId: `pending:${requestId}`,\n eventId: `pending:${requestId}`,\n calendarId: draft.calendar_id,\n title: draft.title,\n startUtc,\n endUtc,\n allDay,\n startDate: allDay ? (draft.start.date ?? undefined) : undefined,\n endDate: allDay ? (draft.end?.date ?? undefined) : undefined,\n color: draft.color || PENDING_EVENT_COLOR,\n editable: false,\n layer: 'event',\n status: 'tentative',\n }\n}\n","/**\n * Event drafts and the write requests built from them.\n *\n * PATCH semantics on the server: only the fields sent change (`exclude_unset`), and for an occurrence of a\n * series the request carries `recurrence_id` + `scope` (`this` = override, `following` = split, `all` =\n * the series; a time change made from one occurrence moves the whole series by the same delta). So an\n * edit sends exactly the fields that differ from what the editor opened with, and a drag sends the\n * occurrence's new start/end in the event's own zone.\n */\nimport type {\n CalendarEvent,\n CalendarSettings,\n DateTimeSpec,\n EditScope,\n EventCreateBody,\n EventPatchBody,\n ScopedTarget,\n} from '@arbidocs/react'\nimport { draftFromSlot } from './draft'\nimport type { EventDraft, EventTimeChange, SlotSelection } from './types'\nimport { addDays, utcToWall } from './zone'\n\n/** A series occurrence needs the \"this / following / all\" choice before it is changed or deleted. */\nexport function needsScope(event: Pick<CalendarEvent, 'recurrence_id'>): boolean {\n return !!event.recurrence_id\n}\n\nexport function scopedTarget(\n event: Pick<CalendarEvent, 'id' | 'recurrence_id'>,\n scope: EditScope\n): ScopedTarget {\n return event.recurrence_id\n ? { id: event.id, scope, recurrence_id: event.recurrence_id }\n : { id: event.id, scope: 'all' }\n}\n\n/** The editor's starting draft for an existing event (series fields from `master` when editing an occurrence). */\nexport function eventToDraft(event: CalendarEvent, master?: CalendarEvent | null): EventDraft {\n const recurrence = event.recurrence ?? master?.recurrence ?? null\n return {\n calendar_id: event.calendar_id,\n title: event.title ?? '',\n description: event.description ?? null,\n location: event.location ?? null,\n start: { ...event.start },\n end: { ...event.end },\n recurrence: recurrence\n ? {\n rrule: recurrence.rrule ?? null,\n rdates: recurrence.rdates ?? [],\n exdates: recurrence.exdates ?? [],\n }\n : null,\n status: event.status,\n show_as: event.show_as,\n sensitivity: event.sensitivity,\n categories: event.categories ?? [],\n color: event.color ?? null,\n reminders: (event.reminders ?? []).map((r) => ({\n minutes_before: r.minutes_before,\n action: r.action,\n relative_to: r.relative_to,\n })),\n use_default_reminders: !!event.use_default_reminders,\n attendees: (event.attendees ?? [])\n .filter((a) => !a.is_organizer)\n .map((a) => ({\n email: a.email ?? null,\n user_id: a.user_id ?? null,\n name: a.name ?? null,\n role: a.role,\n kind: a.kind,\n })),\n conference: event.conference?.url\n ? {\n type: event.conference.type,\n url: event.conference.url,\n call_id: event.conference.call_id ?? null,\n label: event.conference.label ?? null,\n }\n : null,\n attachments: (event.attachments ?? []).map((a) => ({\n url: a.url,\n title: a.title ?? null,\n doc_id: a.doc_id ?? null,\n mime_type: a.mime_type ?? null,\n })),\n url: event.url ?? null,\n conversation_id: event.conversation_id ?? null,\n auto_decline: !!event.auto_decline,\n decline_message: event.decline_message ?? null,\n }\n}\n\n/** A new event draft from a grid slot (or \"now\" rounded up), in the settings zone. */\nexport function newEventDraft(\n settings: Pick<CalendarSettings, 'time_zone' | 'default_duration_minutes'>,\n {\n slot,\n calendarId,\n now = new Date(),\n }: { slot?: SlotSelection | null; calendarId?: string | null; now?: Date } = {}\n): EventDraft {\n const zone = settings.time_zone\n const base: EventDraft = {\n title: '',\n start: {},\n end: {},\n ...(calendarId ? { calendar_id: calendarId } : {}),\n use_default_reminders: true,\n }\n if (slot) return { ...base, ...draftFromSlot(slot, zone, calendarId ?? undefined) }\n const step = 30 * 60_000\n const start = new Date(Math.ceil(now.getTime() / step) * step)\n const end = new Date(start.getTime() + (settings.default_duration_minutes || 30) * 60_000)\n return {\n ...base,\n start: { date_time: utcToWall(start, zone), time_zone: zone },\n end: { date_time: utcToWall(end, zone), time_zone: zone },\n }\n}\n\nconst same = (a: unknown, b: unknown) => JSON.stringify(a ?? null) === JSON.stringify(b ?? null)\n\n/** The conference as the calendar stores it: a webinar's kind and roles live on its call, not the event. */\nfunction conferenceWrite(c: EventDraft['conference']): EventDraft['conference'] {\n if (!c) return c\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { kind, roles, ...stored } = c\n return stored\n}\n\nconst PATCH_FIELDS = [\n 'title',\n 'description',\n 'location',\n 'start',\n 'end',\n 'recurrence',\n 'status',\n 'show_as',\n 'sensitivity',\n 'categories',\n 'color',\n 'reminders',\n 'use_default_reminders',\n 'attendees',\n 'conference',\n 'attachments',\n 'url',\n 'conversation_id',\n 'auto_decline',\n 'decline_message',\n] as const satisfies readonly (keyof EventDraft & keyof EventPatchBody)[]\n\n/** The fields of `draft` that differ from `original` (a cleared field is sent as null). */\nexport function diffDraft(original: EventDraft, draft: EventDraft): EventPatchBody {\n const body: Record<string, unknown> = {}\n const o = { ...original, conference: conferenceWrite(original.conference) }\n const d = { ...draft, conference: conferenceWrite(draft.conference) }\n for (const key of PATCH_FIELDS) {\n if (!same(o[key], d[key])) body[key] = d[key] ?? null\n }\n return body as EventPatchBody\n}\n\nexport interface EditRequest {\n target: ScopedTarget\n /** PATCH body; empty when only the calendar changed. */\n body: EventPatchBody\n /** Calendar to move the event to (POST /move), when the calendar selector changed. */\n moveTo: string | null\n}\n\n/** The scoped PATCH (and optional move) for saving the editor. */\nexport function buildEditRequest(\n event: CalendarEvent,\n original: EventDraft,\n draft: EventDraft,\n scope: EditScope\n): EditRequest {\n const body = diffDraft(original, draft)\n // `this` writes an override: a series rule there is meaningless and dropped by the server anyway.\n if (scope === 'this') delete body.recurrence\n const moveTo =\n draft.calendar_id && draft.calendar_id !== event.calendar_id ? draft.calendar_id : null\n return { target: scopedTarget(event, scope), body, moveTo }\n}\n\n/** POST /events body from a create draft. */\nexport function buildCreateBody(draft: EventDraft): EventCreateBody {\n const body: Record<string, unknown> = { ...draft, title: draft.title.trim() }\n for (const [k, v] of Object.entries(body)) if (v === undefined) delete body[k]\n if (!draft.recurrence?.rrule && !draft.recurrence?.rdates?.length) delete body.recurrence\n if (draft.conference) body.conference = conferenceWrite(draft.conference)\n else delete body.conference\n return body as EventCreateBody\n}\n\nfunction timedSpec(instant: string, original: DateTimeSpec, fallbackZone: string): DateTimeSpec {\n // Keep the event's own zone (floating stays floating, in the viewer's zone).\n const wallZone = original.time_zone || fallbackZone\n return {\n date_time: utcToWall(instant, wallZone),\n time_zone: original.date ? fallbackZone : (original.time_zone ?? null),\n }\n}\n\n/** The scoped PATCH for a drag / resize on the grid. */\nexport function buildTimeChangeRequest(\n event: CalendarEvent,\n change: Pick<EventTimeChange, 'startUtc' | 'endUtc' | 'allDay' | 'startDate' | 'endDate'>,\n scope: EditScope,\n zone: string\n): { target: ScopedTarget; body: EventPatchBody } {\n let start: DateTimeSpec\n let end: DateTimeSpec\n if (change.allDay && change.startDate) {\n start = { date: change.startDate }\n end = { date: change.endDate ?? addDays(change.startDate, 1) }\n } else {\n start = timedSpec(change.startUtc, event.start, zone)\n end = timedSpec(change.endUtc, event.end, zone)\n }\n return { target: scopedTarget(event, scope), body: { start, end } }\n}\n\n/** The scoped DELETE target. */\nexport function buildDeleteTarget(event: CalendarEvent, scope: EditScope): ScopedTarget {\n return scopedTarget(event, scope)\n}\n","/** Free/busy → scheduling-assistant rows (working hours as UTC intervals around a viewer day). */\nimport type { FreeBusyEntry, TimeSuggestion } from '@arbidocs/react'\nimport type { EventDraft, SchedulingRow, TimeSuggestionView } from './types'\nimport { addDays, utcToWall, wallToUtc } from './zone'\n\n/** 0 = Monday … 6 = Sunday, like the API's WorkingHours.day. */\nexport function weekdayMon0(date: string): number {\n return (new Date(`${date}T12:00:00Z`).getUTCDay() + 6) % 7\n}\n\n/**\n * An attendee's working hours (wall times in their zone) as UTC intervals covering the viewer's `date`\n * (the neighbouring days are included because zones shift the day boundary). Empty hours → undefined.\n */\nexport function workingIntervals(\n hours: FreeBusyEntry['working_hours'],\n attendeeZone: string | null | undefined,\n date: string\n): { startUtc: string; endUtc: string }[] | undefined {\n if (!hours?.length) return undefined\n const zone = attendeeZone || 'UTC'\n const out: { startUtc: string; endUtc: string }[] = []\n for (const day of [addDays(date, -1), date, addDays(date, 1)]) {\n const wd = weekdayMon0(day)\n for (const h of hours) {\n if (h.day !== wd) continue\n const end = h.end === '24:00' ? `${addDays(day, 1)}T00:00` : `${day}T${h.end}`\n out.push({ startUtc: wallToUtc(`${day}T${h.start}`, zone), endUtc: wallToUtc(end, zone) })\n }\n }\n return out\n}\n\nexport function freeBusyToRows(\n entries: FreeBusyEntry[],\n date: string,\n labelOf: (attendee: string) => string,\n roomEmails: Set<string>\n): SchedulingRow[] {\n return entries.map((e) => ({\n id: e.attendee,\n label: labelOf(e.attendee),\n known: e.known !== false,\n kind: roomEmails.has(e.attendee.toLowerCase()) ? 'room' : 'person',\n busy: (e.busy ?? []).map((b) => ({\n startUtc: b.start,\n endUtc: b.end,\n showAs: b.show_as,\n title: b.title ?? null,\n })),\n working: workingIntervals(e.working_hours, e.time_zone, date),\n }))\n}\n\nexport function toSuggestionViews(s: TimeSuggestion[]) {\n return s.map((x) => ({\n startUtc: x.start,\n endUtc: x.end,\n available: x.available,\n unavailable: x.unavailable,\n }))\n}\n\n/** Move a draft to a suggestion, keeping each end's own zone. */\nexport function applySuggestion(\n draft: EventDraft,\n s: Pick<TimeSuggestionView, 'startUtc' | 'endUtc'>,\n zone: string\n): EventDraft {\n const sz = draft.start.time_zone ?? zone\n const ez = draft.end.time_zone ?? sz\n return {\n ...draft,\n start: { date: null, date_time: utcToWall(s.startUtc, sz), time_zone: sz },\n end: { date: null, date_time: utcToWall(s.endUtc, ez), time_zone: ez },\n }\n}\n","import type { CalendarSettings } from '@arbidocs/react'\nimport type { CalendarSettingsValue } from './types'\n\n/** API settings → the settings form's value. */\nexport function toSettingsValue(s: CalendarSettings): CalendarSettingsValue {\n return {\n time_zone: s.time_zone,\n secondary_time_zone: s.secondary_time_zone ?? null,\n week_start: s.week_start,\n working_hours: (s.working_hours ?? []).map((w) => ({\n day: w.day,\n start: w.start,\n end: w.end,\n location: w.location ?? null,\n })),\n default_view: s.default_view,\n default_duration_minutes: s.default_duration_minutes,\n default_calendar_id: s.default_calendar_id ?? null,\n show_declined: s.show_declined,\n show_week_numbers: s.show_week_numbers,\n auto_add_invitations: s.auto_add_invitations,\n decline_message: s.decline_message ?? null,\n overlays: s.overlays ?? [],\n }\n}\n","/**\n * Minimal iCalendar reader for the mail invitation card: METHOD and the first VEVENT's UID, summary,\n * times (TZID / UTC / floating / all-day), location, organizer and sequence. Display only — the server\n * stays the authority for applying invitations.\n */\nimport { addDays, isValidTimeZone, wallToUtc } from './zone'\n\nexport interface IcsInvite {\n method: string | null\n uid: string | null\n title: string\n location: string | null\n organizer: { email: string | null; name: string | null } | null\n allDay: boolean\n /** ISO instants (all-day: midnight UTC of the dates). */\n startUtc: string | null\n endUtc: string | null\n /** All-day dates (end exclusive). */\n startDate: string | null\n endDate: string | null\n sequence: number\n status: string | null\n}\n\ninterface Prop {\n name: string\n params: Record<string, string>\n value: string\n}\n\n/** Unfold (RFC 5545 §3.1) and split into properties. */\nexport function icsProps(text: string): Prop[] {\n const lines = text\n .replace(/\\r\\n/g, '\\n')\n .replace(/\\n[ \\t]/g, '')\n .split('\\n')\n const out: Prop[] = []\n for (const line of lines) {\n if (!line.trim()) continue\n // The value starts at the first ':' outside a quoted parameter value.\n let i = 0\n let quoted = false\n for (; i < line.length; i++) {\n const c = line[i]\n if (c === '\"') quoted = !quoted\n else if (c === ':' && !quoted) break\n }\n if (i >= line.length) continue\n const head = line.slice(0, i)\n const value = line.slice(i + 1)\n const [name, ...rawParams] = head.split(';')\n const params: Record<string, string> = {}\n for (const p of rawParams) {\n const eq = p.indexOf('=')\n if (eq > 0) params[p.slice(0, eq).toUpperCase()] = p.slice(eq + 1).replace(/^\"|\"$/g, '')\n }\n out.push({ name: name.toUpperCase(), params, value })\n }\n return out\n}\n\nconst unescape = (v: string) =>\n v.replace(/\\\\n/gi, '\\n').replace(/\\\\,/g, ',').replace(/\\\\;/g, ';').replace(/\\\\\\\\/g, '\\\\')\n\nfunction parseTime(p: Prop | undefined, fallbackZone: string) {\n if (!p) return null\n const v = p.value.trim()\n const dateOnly = p.params.VALUE === 'DATE' || /^\\d{8}$/.test(v)\n const d = `${v.slice(0, 4)}-${v.slice(4, 6)}-${v.slice(6, 8)}`\n if (dateOnly) return { allDay: true, date: d, utc: `${d}T00:00:00Z` }\n const t = `${v.slice(9, 11)}:${v.slice(11, 13)}:${v.slice(13, 15) || '00'}`\n if (v.endsWith('Z')) return { allDay: false, date: d, utc: new Date(`${d}T${t}Z`).toISOString() }\n const tzid = p.params.TZID\n const zone = tzid && isValidTimeZone(tzid) ? tzid : fallbackZone\n return { allDay: false, date: d, utc: new Date(wallToUtc(`${d}T${t}`, zone)).toISOString() }\n}\n\nexport function parseIcsInvite(text: string, fallbackZone = 'UTC'): IcsInvite | null {\n const props = icsProps(text)\n const method =\n props\n .find((p) => p.name === 'METHOD')\n ?.value.trim()\n .toUpperCase() ?? null\n const begin = props.findIndex(\n (p) => p.name === 'BEGIN' && p.value.trim().toUpperCase() === 'VEVENT'\n )\n if (begin < 0) return null\n const end = props.findIndex(\n (p, i) => i > begin && p.name === 'END' && p.value.trim().toUpperCase() === 'VEVENT'\n )\n const ev = props.slice(begin + 1, end < 0 ? undefined : end)\n const get = (n: string) => ev.find((p) => p.name === n)\n const start = parseTime(get('DTSTART'), fallbackZone)\n let finish = parseTime(get('DTEND'), fallbackZone)\n if (!finish && start?.allDay) {\n const next = addDays(start.date, 1)\n finish = { allDay: true, date: next, utc: `${next}T00:00:00Z` }\n }\n const org = get('ORGANIZER')\n return {\n method,\n uid: get('UID')?.value.trim() || null,\n title: unescape(get('SUMMARY')?.value ?? '').trim(),\n location: get('LOCATION') ? unescape(get('LOCATION')!.value).trim() || null : null,\n organizer: org\n ? {\n email: org.value.replace(/^mailto:/i, '').trim() || null,\n name: org.params.CN ? unescape(org.params.CN) : null,\n }\n : null,\n allDay: !!start?.allDay,\n startUtc: start?.utc ?? null,\n endUtc: finish?.utc ?? start?.utc ?? null,\n startDate: start?.allDay ? start.date : null,\n endDate: finish?.allDay ? finish.date : null,\n sequence: Number(get('SEQUENCE')?.value ?? 0) || 0,\n status: get('STATUS')?.value.trim().toUpperCase() ?? null,\n }\n}\n\n/** Is this mail attachment an iCalendar object? */\nexport function isCalendarAttachment(a: { name: string; content_type: string }): boolean {\n return /^text\\/calendar\\b|^application\\/ics\\b/i.test(a.content_type) || /\\.ics$/i.test(a.name)\n}\n","/** A subscribable feed URL: https:// (webcal:// is https), or null when it isn't one. */\nexport function normalizeFeedUrl(raw: string): string | null {\n const v = raw.trim()\n if (!v) return null\n const url = v.replace(/^webcals?:\\/\\//i, 'https://')\n try {\n const u = new URL(url)\n return u.protocol === 'https:' || u.protocol === 'http:' ? u.toString() : null\n } catch {\n return null\n }\n}\n","/**\n * A user-facing sentence for a calendar request that failed. A 422 from a synced Google or\n * Microsoft calendar means the provider cannot store the recurrence (extra dates on Outlook, say).\n */\nexport function describeCalendarError(err: unknown, fallback = 'Something went wrong'): string {\n const message = err instanceof Error ? err.message : typeof err === 'string' ? err : ''\n const status = (err as { status?: unknown } | null)?.status\n if (status === 422 || /represent|can't repeat|cannot express|unrepresentable/i.test(message)) {\n return `This repeat pattern can't be saved to the connected calendar provider${\n message ? ` (${message})` : ''\n }. Simplify the recurrence or keep the event in an ARBI calendar.`\n }\n if (status === 429) return 'Too many requests. Wait a minute and try again.'\n return message || fallback\n}\n\n/** A friendly sentence for a public booking refusal (by its HTTP status). */\nexport function publicBookingMessage(err: unknown): string {\n const status = (err as { status?: unknown } | null)?.status\n if (status === 404) return 'This booking page does not exist or is no longer taking bookings.'\n if (status === 409) return 'Sorry — that time was just taken. Please pick another slot.'\n if (status === 429)\n return 'Too many requests from your network. Please wait a minute and try again.'\n if (status === 410) return 'This booking has already been cancelled.'\n if (err instanceof Error && err.message) return err.message\n return 'Something went wrong. Please try again.'\n}\n","/** Booking page form state ↔ API (`BookingPageWrite` / `BookingPageRead`), incl. the weekly-hours editor. Pure. */\nimport type { BookingPage, BookingPageWriteBody, WeeklyHoursSpec } from '@arbidocs/react'\n\n/** Monday-first, matching the API (`day`: 0 = Monday … 6 = Sunday). */\nexport const WEEKDAY_NAMES = [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday',\n]\n\nexport interface TimeInterval {\n start: string\n end: string\n}\n\nexport interface WeeklyDayState {\n enabled: boolean\n intervals: TimeInterval[]\n}\n\n/** Seven entries, index = API day (0 = Monday). */\nexport type WeeklyHoursState = WeeklyDayState[]\n\nexport const DEFAULT_INTERVAL: TimeInterval = { start: '09:00', end: '17:00' }\n\nexport function defaultWeeklyHours(): WeeklyHoursState {\n return Array.from({ length: 7 }, (_, day) => ({\n enabled: day < 5,\n intervals: [{ ...DEFAULT_INTERVAL }],\n }))\n}\n\nconst HHMM = /^([01]\\d|2[0-3]):[0-5]\\d$/\nconst HHMM_END = /^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$/\n\nconst minutes = (t: string) => Number(t.slice(0, 2)) * 60 + Number(t.slice(3, 5))\n\n/** API rows → editor state (days without rows are off with a 9–5 default ready to switch on). */\nexport function weeklyFromApi(\n rows: ReadonlyArray<Record<string, unknown>> | undefined\n): WeeklyHoursState {\n const state: WeeklyHoursState = Array.from({ length: 7 }, () => ({\n enabled: false,\n intervals: [] as TimeInterval[],\n }))\n for (const r of rows ?? []) {\n const day = Number(r.day)\n if (!Number.isInteger(day) || day < 0 || day > 6) continue\n state[day].enabled = true\n state[day].intervals.push({ start: String(r.start ?? ''), end: String(r.end ?? '') })\n }\n for (const d of state) {\n if (!d.intervals.length) d.intervals.push({ ...DEFAULT_INTERVAL })\n d.intervals.sort((a, b) => a.start.localeCompare(b.start))\n }\n return state\n}\n\n/** Problems per day (index → message); empty when valid. */\nexport function validateWeekly(state: WeeklyHoursState): Record<number, string> {\n const errors: Record<number, string> = {}\n let total = 0\n state.forEach((d, day) => {\n if (!d.enabled) return\n const sorted = [...d.intervals].sort((a, b) => a.start.localeCompare(b.start))\n total += sorted.length\n for (const iv of sorted) {\n if (!HHMM.test(iv.start) || !HHMM_END.test(iv.end)) {\n errors[day] = 'Use HH:MM times'\n return\n }\n if (minutes(iv.end) <= minutes(iv.start)) {\n errors[day] = 'End must be after start'\n return\n }\n }\n for (let i = 1; i < sorted.length; i++) {\n if (minutes(sorted[i].start) < minutes(sorted[i - 1].end)) {\n errors[day] = 'Time ranges overlap'\n return\n }\n }\n })\n if (total > 21) errors[-1] = 'At most 21 time ranges per week'\n return errors\n}\n\n/** Editor state → API `weekly` rows, sorted by day then start. Disabled days are left out. */\nexport function weeklyToPayload(state: WeeklyHoursState): WeeklyHoursSpec[] {\n const out: WeeklyHoursSpec[] = []\n state.forEach((d, day) => {\n if (!d.enabled) return\n for (const iv of [...d.intervals].sort((a, b) => a.start.localeCompare(b.start)))\n out.push({ day, start: iv.start, end: iv.end })\n })\n return out\n}\n\nexport interface BookingFormState {\n slug: string\n title: string\n description: string\n /** Comma-separated minutes, e.g. \"30, 60\" */\n durations: string\n timeZone: string\n weekly: WeeklyHoursState\n bufferMinutes: string\n minNoticeHours: string\n maxDaysAhead: string\n dailyLimit: string\n location: string\n active: boolean\n}\n\nexport function emptyBookingForm(timeZone: string): BookingFormState {\n return {\n slug: '',\n title: '',\n description: '',\n durations: '30',\n timeZone,\n weekly: defaultWeeklyHours(),\n bufferMinutes: '0',\n minNoticeHours: '4',\n maxDaysAhead: '60',\n dailyLimit: '',\n location: '',\n active: true,\n }\n}\n\nexport function bookingToForm(p: BookingPage): BookingFormState {\n return {\n slug: p.slug,\n title: p.title,\n description: p.description ?? '',\n durations: p.durations.join(', '),\n timeZone: p.time_zone,\n weekly: weeklyFromApi(p.weekly),\n bufferMinutes: String(p.buffer_minutes ?? 0),\n minNoticeHours: String(Math.round(((p.min_notice_minutes ?? 0) / 60) * 100) / 100),\n maxDaysAhead: String(p.max_days_ahead ?? 60),\n dailyLimit: p.daily_limit ? String(p.daily_limit) : '',\n location: p.location ?? '',\n active: p.active ?? true,\n }\n}\n\nexport function parseDurations(text: string): number[] | null {\n const parts = text\n .split(/[\\s,]+/)\n .map((s) => s.trim())\n .filter(Boolean)\n if (!parts.length) return null\n const values = parts.map(Number)\n if (values.some((v) => !Number.isInteger(v) || v < 5 || v > 480)) return null\n return [...new Set(values)].sort((a, b) => a - b)\n}\n\n/** Lower-case, dashes; what the server accepts in `/book/<slug>`. */\nexport function slugify(text: string): string {\n return text\n .toLowerCase()\n .normalize('NFKD')\n .replace(/[̀-ͯ]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 63)\n}\n\nconst SLUG = /^[a-z0-9][a-z0-9-]{2,62}$/\n\nexport function validateBookingForm(f: BookingFormState): Record<string, string> {\n const errors: Record<string, string> = {}\n if (!SLUG.test(f.slug)) errors.slug = '3–63 lower-case letters, digits or dashes'\n if (!f.title.trim()) errors.title = 'Enter a title'\n const durations = parseDurations(f.durations)\n if (!durations) errors.durations = 'Minutes between 5 and 480, e.g. 15, 30, 60'\n else if (durations.length > 6) errors.durations = 'At most 6 durations'\n const int = (v: string, lo: number, hi: number) => {\n const n = Number(v)\n return v.trim() !== '' && Number.isFinite(n) && n >= lo && n <= hi\n }\n if (!int(f.bufferMinutes, 0, 240)) errors.bufferMinutes = '0–240 minutes'\n if (!int(f.minNoticeHours, 0, 720)) errors.minNoticeHours = '0–720 hours'\n if (!int(f.maxDaysAhead, 1, 365) || !Number.isInteger(Number(f.maxDaysAhead)))\n errors.maxDaysAhead = '1–365 days'\n if (\n f.dailyLimit.trim() &&\n (!int(f.dailyLimit, 1, 100) || !Number.isInteger(Number(f.dailyLimit)))\n )\n errors.dailyLimit = '1–100, or empty for no limit'\n const weekly = validateWeekly(f.weekly)\n if (Object.keys(weekly).length) errors.weekly = Object.values(weekly)[0]\n else if (!weeklyToPayload(f.weekly).length) errors.weekly = 'Turn on at least one day'\n return errors\n}\n\nexport function formToBookingBody(f: BookingFormState): BookingPageWriteBody {\n return {\n slug: f.slug,\n title: f.title.trim(),\n description: f.description.trim() || null,\n durations: parseDurations(f.durations) ?? [30],\n time_zone: f.timeZone,\n weekly: weeklyToPayload(f.weekly),\n buffer_minutes: Math.round(Number(f.bufferMinutes) || 0),\n min_notice_minutes: Math.round((Number(f.minNoticeHours) || 0) * 60),\n max_days_ahead: Math.round(Number(f.maxDaysAhead) || 60),\n daily_limit: f.dailyLimit.trim() ? Math.round(Number(f.dailyLimit)) : null,\n location: f.location.trim() || null,\n active: f.active,\n }\n}\n\n/** The public link: the server's URL, or this origin + /book/<slug>. */\nexport function bookingLink(page: Pick<BookingPage, 'slug' | 'url'>): string {\n return page.url || `${window.location.origin}/book/${page.slug}`\n}\n","/** Weekly availability editor: per weekday on/off and one or more time ranges (Monday first, API day order). */\nimport { Plus, X } from 'lucide-react'\nimport { Button, Input, Switch, cn } from '@arbidocs/react/ui'\nimport {\n DEFAULT_INTERVAL,\n WEEKDAY_NAMES,\n validateWeekly,\n type TimeInterval,\n type WeeklyHoursState,\n} from './booking-form'\n\nexport interface WeeklyHoursEditorProps {\n value: WeeklyHoursState\n onChange: (value: WeeklyHoursState) => void\n className?: string\n}\n\nexport function WeeklyHoursEditor({ value, onChange, className }: WeeklyHoursEditorProps) {\n const errors = validateWeekly(value)\n const setDay = (day: number, patch: Partial<WeeklyHoursState[number]>) =>\n onChange(value.map((d, i) => (i === day ? { ...d, ...patch } : d)))\n const setInterval = (day: number, idx: number, patch: Partial<TimeInterval>) =>\n setDay(day, {\n intervals: value[day].intervals.map((iv, j) => (j === idx ? { ...iv, ...patch } : iv)),\n })\n\n return (\n <div className={cn('grid gap-1.5', className)} data-testid=\"weekly-hours-editor\">\n {value.map((d, day) => (\n <div\n key={day}\n className=\"grid grid-cols-[7.5rem_1fr] items-start gap-2 text-sm sm:grid-cols-[9rem_1fr]\"\n >\n <label className=\"flex h-9 items-center gap-2\">\n <Switch\n checked={d.enabled}\n onCheckedChange={(enabled) =>\n setDay(day, {\n enabled,\n intervals: d.intervals.length ? d.intervals : [{ ...DEFAULT_INTERVAL }],\n })\n }\n aria-label={`${WEEKDAY_NAMES[day]} available`}\n data-testid={`weekly-day-${day}`}\n />\n <span className={d.enabled ? 'text-foreground' : 'text-muted-foreground'}>\n {WEEKDAY_NAMES[day]}\n </span>\n </label>\n {d.enabled ? (\n <div className=\"grid gap-1\">\n {d.intervals.map((iv, idx) => (\n <div key={idx} className=\"flex items-center gap-1\">\n <Input\n type=\"time\"\n className=\"w-28\"\n aria-label={`${WEEKDAY_NAMES[day]} start ${idx + 1}`}\n value={iv.start}\n onChange={(e) => setInterval(day, idx, { start: e.target.value })}\n data-testid={`weekly-${day}-${idx}-start`}\n />\n <span className=\"text-muted-foreground\">–</span>\n <Input\n type=\"time\"\n className=\"w-28\"\n aria-label={`${WEEKDAY_NAMES[day]} end ${idx + 1}`}\n value={iv.end === '24:00' ? '23:59' : iv.end}\n onChange={(e) => setInterval(day, idx, { end: e.target.value })}\n data-testid={`weekly-${day}-${idx}-end`}\n />\n {d.intervals.length > 1 && (\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n aria-label={`Remove ${WEEKDAY_NAMES[day]} range ${idx + 1}`}\n onClick={() =>\n setDay(day, { intervals: d.intervals.filter((_, j) => j !== idx) })\n }\n >\n <X className=\"size-4\" />\n </Button>\n )}\n {idx === d.intervals.length - 1 && (\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n aria-label={`Add ${WEEKDAY_NAMES[day]} range`}\n onClick={() =>\n setDay(day, {\n intervals: [\n ...d.intervals,\n { start: iv.end < '23:00' ? iv.end : '18:00', end: '23:00' },\n ],\n })\n }\n >\n <Plus className=\"size-4\" />\n </Button>\n )}\n </div>\n ))}\n {errors[day] && <span className=\"text-xs text-destructive\">{errors[day]}</span>}\n </div>\n ) : (\n <span className=\"flex h-9 items-center text-muted-foreground\">Unavailable</span>\n )}\n </div>\n ))}\n {errors[-1] && <span className=\"text-xs text-destructive\">{errors[-1]}</span>}\n </div>\n )\n}\n","/** The room-finder window: wall times in an IANA zone (zone math is the calendar block's). */\nimport { utcToWall } from './zone'\n\n/** Default window: the next half hour, for one hour. */\nexport function defaultRoomWindow(\n zone: string,\n now: Date = new Date()\n): { start: string; end: string } {\n const step = 30 * 60_000\n const start = new Date(Math.ceil(now.getTime() / step) * step)\n const end = new Date(start.getTime() + 60 * 60_000)\n return { start: utcToWall(start, zone), end: utcToWall(end, zone) }\n}\n\nexport function formatBusy(start: string, end: string, zone: string): string {\n const fmt = new Intl.DateTimeFormat(undefined, {\n timeZone: zone,\n hour: 'numeric',\n minute: '2-digit',\n })\n return `${fmt.format(new Date(start))}–${fmt.format(new Date(end))}`\n}\n","/** Create a calendar, or rename / recolour one. */\nimport { useEffect, useState } from 'react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\n\nexport interface CalendarFormValue {\n name: string\n color: string\n}\n\nexport interface CalendarFormDialogProps {\n open: boolean\n mode: 'create' | 'edit'\n initial: CalendarFormValue\n saving?: boolean\n onSave: (value: CalendarFormValue) => void\n onCancel: () => void\n}\n\nconst CALENDAR_SWATCHES = [\n '#3b82f6',\n '#10b981',\n '#f59e0b',\n '#ef4444',\n '#8b5cf6',\n '#ec4899',\n '#14b8a6',\n '#64748b',\n]\n\nexport function CalendarFormDialog({\n open,\n mode,\n initial,\n saving,\n onSave,\n onCancel,\n}: CalendarFormDialogProps) {\n const [value, setValue] = useState(initial)\n useEffect(() => {\n if (open) setValue(initial)\n // Reset only when the dialog opens.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n const name = value.name.trim()\n return (\n <Dialog open={open} onOpenChange={(next) => !next && onCancel()}>\n <DialogContent className=\"sm:max-w-md\" data-testid=\"calendar-form-dialog\">\n <DialogHeader>\n <DialogTitle>{mode === 'create' ? 'New calendar' : 'Edit calendar'}</DialogTitle>\n <DialogDescription className=\"sr-only\">Calendar name and colour</DialogDescription>\n </DialogHeader>\n <form\n className=\"flex flex-col gap-4\"\n onSubmit={(e) => {\n e.preventDefault()\n if (name) onSave({ name, color: value.color })\n }}\n >\n <label className=\"flex flex-col gap-1 text-sm\">\n <span className=\"font-medium\">Name</span>\n <Input\n autoFocus\n value={value.name}\n maxLength={200}\n onChange={(e) => setValue({ ...value, name: e.target.value })}\n data-testid=\"calendar-form-name\"\n />\n </label>\n <fieldset className=\"flex flex-col gap-1 text-sm\">\n <legend className=\"mb-1 font-medium\">Colour</legend>\n <div className=\"flex flex-wrap items-center gap-2\">\n {CALENDAR_SWATCHES.map((c) => (\n <button\n key={c}\n type=\"button\"\n aria-label={`Colour ${c}`}\n aria-pressed={value.color.toLowerCase() === c}\n className={`size-7 rounded-full border-2 ${value.color.toLowerCase() === c ? 'border-foreground' : 'border-transparent'}`}\n style={{ backgroundColor: c }}\n onClick={() => setValue({ ...value, color: c })}\n />\n ))}\n <input\n type=\"color\"\n aria-label=\"Custom colour\"\n className=\"size-7 cursor-pointer rounded border-0 bg-transparent p-0\"\n value={value.color}\n onChange={(e) => setValue({ ...value, color: e.target.value })}\n />\n </div>\n </fieldset>\n <DialogFooter>\n <Button type=\"button\" variant=\"ghost\" onClick={onCancel}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={!name || saving} data-testid=\"calendar-form-save\">\n {saving ? 'Saving…' : mode === 'create' ? 'Create' : 'Save'}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","/** \"Propose new time\" for an invitation: a start/end in the user's zone and an optional note. */\nimport { useEffect, useState } from 'react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\nimport { utcToDate, utcToTime } from './zone'\n\nexport interface ProposeTimeValue {\n start: { date_time: string; time_zone: string }\n end: { date_time: string; time_zone: string }\n comment: string | null\n}\n\nexport interface ProposeTimeDialogProps {\n open: boolean\n /** The event's current slot (prefills the form). */\n startUtc: string | null\n endUtc: string | null\n timeZone: string\n sending?: boolean\n onSend: (v: ProposeTimeValue) => void\n onCancel: () => void\n}\n\nexport function ProposeTimeDialog({\n open,\n startUtc,\n endUtc,\n timeZone,\n sending,\n onSend,\n onCancel,\n}: ProposeTimeDialogProps) {\n const [date, setDate] = useState('')\n const [start, setStart] = useState('')\n const [end, setEnd] = useState('')\n const [comment, setComment] = useState('')\n useEffect(() => {\n if (!open || !startUtc || !endUtc) return\n setDate(utcToDate(startUtc, timeZone))\n setStart(utcToTime(startUtc, timeZone))\n setEnd(utcToTime(endUtc, timeZone))\n setComment('')\n }, [open, startUtc, endUtc, timeZone])\n const valid = !!date && !!start && !!end && end > start\n return (\n <Dialog open={open} onOpenChange={(o) => !o && onCancel()}>\n <DialogContent className=\"sm:max-w-md\" data-testid=\"calendar-propose-dialog\">\n <DialogHeader>\n <DialogTitle>Propose a new time</DialogTitle>\n <DialogDescription>The organiser can accept or decline your proposal.</DialogDescription>\n </DialogHeader>\n <form\n className=\"flex flex-col gap-3\"\n onSubmit={(e) => {\n e.preventDefault()\n if (!valid) return\n onSend({\n start: { date_time: `${date}T${start}`, time_zone: timeZone },\n end: { date_time: `${date}T${end}`, time_zone: timeZone },\n comment: comment.trim() || null,\n })\n }}\n >\n <div className=\"flex flex-wrap items-center gap-2\">\n <Input\n type=\"date\"\n className=\"w-40\"\n aria-label=\"Date\"\n value={date}\n onChange={(e) => setDate(e.target.value)}\n data-testid=\"calendar-propose-date\"\n />\n <Input\n type=\"time\"\n className=\"w-28\"\n aria-label=\"Start time\"\n value={start}\n onChange={(e) => setStart(e.target.value)}\n data-testid=\"calendar-propose-start\"\n />\n <span className=\"text-muted-foreground\">–</span>\n <Input\n type=\"time\"\n className=\"w-28\"\n aria-label=\"End time\"\n value={end}\n onChange={(e) => setEnd(e.target.value)}\n data-testid=\"calendar-propose-end\"\n />\n </div>\n <Input\n placeholder=\"Add a note (optional)\"\n value={comment}\n maxLength={2000}\n onChange={(e) => setComment(e.target.value)}\n data-testid=\"calendar-propose-comment\"\n />\n <DialogFooter>\n <Button type=\"button\" variant=\"ghost\" onClick={onCancel}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={!valid || sending} data-testid=\"calendar-propose-send\">\n {sending ? 'Sending…' : 'Send proposal'}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/calendar/labels.ts","../src/calendar/colors.ts","../src/calendar/ui.tsx","../src/calendar/grid-model.ts","../src/calendar/CalendarGrid.tsx","../src/calendar/MiniMonth.tsx","../src/calendar/CalendarList.tsx","../src/calendar/conference.ts","../src/calendar/draft.ts","../src/calendar/recurrence.ts","../src/calendar/recurrence-labels.ts","../src/calendar/RecurrenceEditor.tsx","../src/calendar/format.ts","../src/calendar/TimeZonePicker.tsx","../src/calendar/reminders.ts","../src/calendar/EventAttachments.tsx","../src/calendar/EventEditor.tsx","../src/calendar/EventDetails.tsx","../src/calendar/ScopeDialog.tsx","../src/calendar/scheduling.ts","../src/calendar/SchedulingAssistant.tsx","../src/calendar/CalendarSettingsForm.tsx","../src/calendar/print-layout.ts","../src/calendar/CalendarPrint.tsx","../src/calendar/printCalendar.tsx","../src/calendar/booking-slots.ts","../src/calendar/api-mapping.ts","../src/calendar/requests.ts","../src/calendar/freebusy.ts","../src/calendar/settings-value.ts","../src/calendar/ics.ts","../src/calendar/feeds.ts","../src/calendar/errors.ts","../src/calendar/booking-form.ts","../src/calendar/WeeklyHoursEditor.tsx","../src/calendar/room-window.ts","../src/calendar/CalendarFormDialog.tsx","../src/calendar/ProposeTimeDialog.tsx"],"names":["forwardRef","NativeSelect","jsx","cn","jsxs","NamedTimeZoneImpl","wallArrayOffset","epochToWallArray","createPlugin","utcToDate","addDays","Lightbulb","Workflow","ListTodo","Fragment","Lock","Repeat","Video","MapPin","useMemo","safeZone","isValidTimeZone","useRef","useState","useCallback","useEffect","end","convertWall","utcToTime","zoneOffsetLabel","formatInZone","h","dayGridPlugin","timeGridPlugin","listPlugin","interactionPlugin","multiMonthPlugin","Button","ChevronLeft","ChevronRight","zoneCity","FullCalendar","todayInZone","startOfWeek","formatPlainDate","addMonths","isoWeekNumber","Plus","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuItem","EllipsisVertical","DropdownMenuLabel","DropdownMenuSeparator","wallToEpochMs","start","diffDays","utcToWall","Temporal","wallToUtc","Input","a","listTimeZones","zoneOffsetMinutes","Popover","PopoverTrigger","Globe","ChevronDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","Check","minutes","document","Paperclip","DocumentPicker","X","useId","Clock","Switch","CalendarDays","Users","TextAlignStart","Textarea","Bell","Tag","Palette","Trash2","Pencil","CircleCheck","CircleX","DoorOpen","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","User","Sparkles","from","dayOfWeekSun0","detectTimeZone","createRoot","flushSync","timedSpec","DialogFooter"],"mappings":"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","file":"chunk-I6SPGHFY.cjs","sourcesContent":["import type { CalendarLabels } from './types'\n\n/** Every fixed string of the calendar block. Pass `labels` to any component to override. */\nexport const CALENDAR_DEFAULT_LABELS: CalendarLabels = {\n today: 'Today',\n view: 'View',\n previous: 'Previous',\n next: 'Next',\n day: 'Day',\n week: 'Week',\n workWeek: 'Work week',\n month: 'Month',\n agenda: 'Agenda',\n year: 'Year',\n allDay: 'All day',\n busy: 'Busy',\n noTitle: '(No title)',\n noEvents: 'No events',\n weekAbbrev: 'W',\n more: 'more',\n newEvent: 'New event',\n myCalendars: 'My calendars',\n sharedCalendars: 'Shared with me',\n workspaceCalendars: 'Workspace calendars',\n subscribedCalendars: 'Subscribed',\n overlays: 'Also show',\n facts: 'Dated facts',\n workflows: 'Workflows',\n tasks: 'Tasks',\n createCalendar: 'New calendar',\n editCalendar: 'Settings and sharing',\n importCalendar: 'Import .ics',\n exportCalendar: 'Export .ics',\n deleteCalendar: 'Delete calendar',\n locked: 'Locked calendar',\n showCalendar: 'Show',\n hideCalendar: 'Hide',\n calendarColor: 'Colour',\n title: 'Title',\n titlePlaceholder: 'Add a title',\n calendar: 'Calendar',\n start: 'Start',\n end: 'End',\n startTime: 'Start time',\n endTime: 'End time',\n arbiCall: 'ARBI call',\n arbiWebinar: 'ARBI webinar',\n startTimeZone: 'Start time zone',\n endTimeZone: 'End time zone',\n separateTimeZones: 'Time zones',\n repeat: 'Repeat',\n location: 'Location',\n description: 'Description',\n attendees: 'Guests',\n addAttendee: 'Add guests by email',\n required: 'Required',\n optional: 'Optional',\n showAs: 'Show as',\n sensitivity: 'Visibility',\n categories: 'Categories',\n addCategory: 'Add a category',\n color: 'Colour',\n defaultColor: 'Calendar colour',\n reminders: 'Reminders',\n addReminder: 'Add reminder',\n useDefaultReminders: 'Use calendar default reminders',\n conference: 'Audio or video call',\n addArbiCall: 'Add ARBI call',\n addArbiWebinar: 'Add ARBI webinar',\n webinar: 'Webinar',\n webinarLinkOnSave: 'The link is created when you save',\n webinarRole: 'Webinar role',\n cohost: 'Co-host',\n panelist: 'Panelist',\n webinarAttendee: 'Attendee',\n joinWebinar: 'Join webinar',\n addMeetingLink: 'Add call link or dial-in',\n meetingLinkPlaceholder: 'https://… or phone number',\n removeConference: 'Remove call',\n attachments: 'Attachments',\n addAttachment: 'Add link',\n attachmentUrlPlaceholder: 'https://…',\n attachmentTitlePlaceholder: 'Title (optional)',\n status: 'Status',\n save: 'Save',\n saving: 'Saving…',\n cancel: 'Cancel',\n delete: 'Delete',\n edit: 'Edit',\n remove: 'Remove',\n createTitle: 'New event',\n editTitle: 'Edit event',\n minutes: 'minutes',\n hours: 'hours',\n days: 'days',\n weeks: 'weeks',\n beforeStart: 'before',\n popup: 'Notification',\n email: 'Email',\n atStart: 'At time of event',\n free: 'Free',\n tentative: 'Tentative',\n oof: 'Out of office',\n workingElsewhere: 'Working elsewhere',\n normal: 'Default visibility',\n private: 'Private',\n confidential: 'Confidential',\n confirmed: 'Confirmed',\n cancelled: 'Cancelled',\n join: 'Join',\n openMeetingChat: 'Open meeting chat',\n accept: 'Yes',\n decline: 'No',\n maybe: 'Maybe',\n going: 'Going?',\n organizer: 'Organiser',\n needsAction: 'Awaiting reply',\n accepted: 'Accepted',\n declined: 'Declined',\n delegated: 'Delegated',\n recurring: 'Repeats',\n scopeEditTitle: 'Edit recurring event',\n scopeDeleteTitle: 'Delete recurring event',\n scopeThis: 'This event',\n scopeFollowing: 'This and following events',\n scopeAll: 'All events',\n settingsTitle: 'Calendar settings',\n timeZone: 'Time zone',\n secondaryTimeZone: 'Secondary time zone',\n none: 'None',\n weekStart: 'Week starts on',\n workingHours: 'Working hours',\n defaultView: 'Default view',\n defaultDuration: 'Default event length',\n defaultCalendar: 'Default calendar',\n showDeclined: 'Show declined events',\n showWeekNumbers: 'Show week numbers',\n autoAddInvitations: 'Add invitations to my calendar',\n autoAddAll: 'From everyone',\n autoAddKnown: 'Only from people I know',\n autoAddNone: 'Only after I respond',\n declineMessage: 'Default decline message',\n searchTimeZones: 'Search time zones',\n invalidRange: 'The end must be after the start.',\n titleRequired: 'Add a title.',\n removeFromCalendar: 'Remove from calendar',\n proposeNewTime: 'Propose new time',\n scopeRespondTitle: 'Respond to a recurring event',\n send: 'Send',\n focusTime: 'Focus time',\n autoDecline: 'Decline new invitations',\n declineMessagePlaceholder: 'Message for declined invitations (optional)',\n schedulingAssistant: 'Scheduling assistant',\n findATime: 'Find a time',\n findingTimes: 'Finding times…',\n noSuggestions: 'No free times found in this range.',\n everyoneFree: 'Everyone available',\n unavailableCount: 'unavailable',\n unknownAvailability: 'Availability not shared',\n outsideWorkingHours: 'Outside working hours',\n rooms: 'Rooms',\n room: 'Room',\n you: 'You',\n addCalendar: 'Add calendar',\n subscribeFromUrl: 'Subscribe from URL',\n addHolidays: 'Holidays',\n importIcs: 'Import .ics file',\n shareCalendar: 'Share…',\n refreshCalendar: 'Refresh',\n publishTo: 'Publish to…',\n suggestions: 'Suggestions',\n}\n\nexport const mergeLabels = (labels?: Partial<CalendarLabels>): CalendarLabels => ({\n ...CALENDAR_DEFAULT_LABELS,\n ...labels,\n})\n","/** Calendar colour palette and readable text colour for a background. */\nexport const CALENDAR_COLORS = [\n '#3b82f6',\n '#0ea5e9',\n '#14b8a6',\n '#22c55e',\n '#84cc16',\n '#eab308',\n '#f97316',\n '#ef4444',\n '#ec4899',\n '#a855f7',\n '#6366f1',\n '#64748b',\n]\n\n/** Black or white text for a hex background (WCAG relative luminance). */\nexport function contrastText(hex: string): string {\n const m = /^#?([0-9a-f]{6})$/i.exec(hex.trim())\n if (!m) return '#ffffff'\n const n = parseInt(m[1], 16)\n const ch = [(n >> 16) & 255, (n >> 8) & 255, n & 255].map((v) => {\n const c = v / 255\n return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4\n })\n const lum = 0.2126 * ch[0] + 0.7152 * ch[1] + 0.0722 * ch[2]\n // Contrast against white vs. near-black; pick the larger.\n return 1.05 / (lum + 0.05) >= (lum + 0.05) / 0.05 ? '#ffffff' : '#111827'\n}\n","/** Small form primitives shared by the calendar forms (native controls: work on phones, easy to test). */\nimport { forwardRef, type ReactNode, type SelectHTMLAttributes } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { CALENDAR_COLORS } from './colors'\n\nexport const NativeSelect = forwardRef<HTMLSelectElement, SelectHTMLAttributes<HTMLSelectElement>>(\n function NativeSelect({ className, children, ...props }, ref) {\n return (\n <select\n ref={ref}\n className={cn(\n 'h-9 rounded-md border border-input bg-background px-2 text-sm text-foreground shadow-sm',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50',\n className\n )}\n {...props}\n >\n {children}\n </select>\n )\n }\n)\n\nexport function FieldRow({\n icon,\n label,\n children,\n className,\n}: {\n icon?: ReactNode\n label?: ReactNode\n children: ReactNode\n className?: string\n}) {\n return (\n <div className={cn('flex items-start gap-3', className)}>\n <div\n className=\"mt-2 flex h-5 w-5 shrink-0 items-center justify-center text-muted-foreground\"\n aria-hidden\n >\n {icon}\n </div>\n <div className=\"min-w-0 flex-1 space-y-1.5\">\n {label && <div className=\"text-xs font-medium text-muted-foreground\">{label}</div>}\n {children}\n </div>\n </div>\n )\n}\n\nexport function ColorSwatches({\n value,\n onChange,\n allowNone,\n noneLabel,\n testIdPrefix,\n}: {\n value: string | null | undefined\n onChange: (color: string | null) => void\n allowNone?: boolean\n noneLabel?: string\n testIdPrefix?: string\n}) {\n return (\n <div className=\"flex flex-wrap items-center gap-1.5\" role=\"radiogroup\">\n {allowNone && (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={!value}\n aria-label={noneLabel}\n title={noneLabel}\n onClick={() => onChange(null)}\n className={cn(\n 'h-6 rounded-full border border-border px-2 text-xs text-muted-foreground',\n !value && 'ring-2 ring-ring ring-offset-1 ring-offset-background'\n )}\n >\n {noneLabel}\n </button>\n )}\n {CALENDAR_COLORS.map((c) => (\n <button\n key={c}\n type=\"button\"\n role=\"radio\"\n aria-checked={value?.toLowerCase() === c}\n aria-label={c}\n title={c}\n data-testid={testIdPrefix ? `${testIdPrefix}-${c.slice(1)}` : undefined}\n onClick={() => onChange(c)}\n className={cn(\n 'h-6 w-6 rounded-full border border-black/10',\n value?.toLowerCase() === c && 'ring-2 ring-ring ring-offset-1 ring-offset-background'\n )}\n style={{ backgroundColor: c }}\n />\n ))}\n </div>\n )\n}\n","/**\n * The model side of CalendarGrid: the Temporal zone plugin for FullCalendar, view mapping, working\n * hours → business hours, and GridEvent → FullCalendar EventInput.\n */\nimport { createPlugin } from '@fullcalendar/core'\nimport type { EventInput, PluginDef } from '@fullcalendar/core'\nimport { NamedTimeZoneImpl } from '@fullcalendar/core/internal'\nimport type { CalendarLabels, CalendarViewKind, GridEvent, WorkingHoursSpec } from './types'\nimport { addDays, epochToWallArray, utcToDate, wallArrayOffset } from './zone'\n\n// ── zone plugin ─────────────────────────────────────────────────────────────────\n\nlet temporalZonePlugin: PluginDef | null = null\n\n/** FullCalendar plugin resolving named zones with Temporal (built once, on first render). */\nexport function getTemporalTimeZonePlugin(): PluginDef {\n if (!temporalZonePlugin) {\n class TemporalNamedTimeZone extends NamedTimeZoneImpl {\n offsetForArray(a: number[]): number {\n return wallArrayOffset(a, this.timeZoneName)\n }\n timestampToArray(ms: number): number[] {\n return epochToWallArray(ms, this.timeZoneName)\n }\n }\n temporalZonePlugin = createPlugin({\n name: 'arbi-temporal-timezone',\n namedTimeZonedImpl: TemporalNamedTimeZone,\n })\n }\n return temporalZonePlugin\n}\n\n// ── views ───────────────────────────────────────────────────────────────────────\n\nexport const FC_VIEW: Record<CalendarViewKind, string> = {\n day: 'timeGridDay',\n week: 'timeGridWeek',\n work_week: 'arbiWorkWeek',\n month: 'dayGridMonth',\n agenda: 'arbiAgenda',\n year: 'multiMonthYear',\n}\n\nexport const VIEW_OF_FC: Record<string, CalendarViewKind> = Object.fromEntries(\n Object.entries(FC_VIEW).map(([k, v]) => [v, k as CalendarViewKind])\n)\n\nexport const VIEW_ORDER: CalendarViewKind[] = [\n 'day',\n 'work_week',\n 'week',\n 'month',\n 'agenda',\n 'year',\n]\nexport const NARROW_VIEWS: CalendarViewKind[] = ['day', 'month', 'agenda']\n\n/** Width (px) under which the grid switches to its phone layout. */\nexport const CALENDAR_NARROW_WIDTH = 640\n\n/** The view a narrow (phone) screen shows for the requested one: wide time grids collapse to a day. */\nexport function effectiveCalendarView(view: CalendarViewKind, narrow: boolean): CalendarViewKind {\n if (!narrow) return view\n return view === 'week' || view === 'work_week' || view === 'year' ? 'day' : view\n}\n\nexport const viewLabel = (v: CalendarViewKind, l: CalendarLabels): string =>\n ({\n day: l.day,\n week: l.week,\n work_week: l.workWeek,\n month: l.month,\n agenda: l.agenda,\n year: l.year,\n })[v]\n\n/** FullCalendar business hours from working hours (0 = Monday → FC 1). */\nexport function toBusinessHours(hours: WorkingHoursSpec[] | undefined) {\n if (!hours?.length) return false as const\n return hours.map((h) => ({\n daysOfWeek: [(h.day + 1) % 7],\n startTime: h.start,\n endTime: h.end === '24:00' ? '24:00:00' : h.end,\n }))\n}\n\n/** Days (FC: 0 = Sunday) the work-week view hides. */\nexport function workWeekHiddenDays(hours: WorkingHoursSpec[] | undefined): number[] {\n const shown = new Set((hours ?? []).map((h) => (h.day + 1) % 7))\n if (shown.size === 0) return [0, 6]\n return [0, 1, 2, 3, 4, 5, 6].filter((d) => !shown.has(d))\n}\n\n// ── events ──────────────────────────────────────────────────────────────────────\n\n/** CSS classes describing an event's state (also used by tests and hosts). */\nexport function eventStateClasses(e: GridEvent): string[] {\n const out = ['arbi-cal-event', `arbi-cal-layer-${e.layer}`]\n if (e.layer !== 'event') out.push('arbi-cal-overlay')\n if (e.status === 'cancelled') out.push('arbi-cal-cancelled')\n if (e.myPartstat === 'declined') out.push('arbi-cal-declined')\n else if (e.myPartstat === 'needs_action') out.push('arbi-cal-needs-action')\n else if (e.myPartstat === 'tentative' || e.status === 'tentative' || e.showAs === 'tentative')\n out.push('arbi-cal-tentative')\n if (e.showAs === 'free') out.push('arbi-cal-free')\n if (e.showAs === 'oof') out.push('arbi-cal-oof')\n if (e.restricted) out.push('arbi-cal-restricted')\n return out\n}\n\nexport function toEventInput(e: GridEvent, zone: string): EventInput {\n const editable = e.editable && e.layer === 'event' && !e.restricted\n const base: EventInput = {\n id: e.instanceId,\n title: e.title,\n editable,\n startEditable: editable,\n durationEditable: editable,\n classNames: eventStateClasses(e),\n // The inner content paints the block (see calendar.css); the harness only carries the border\n // colour (list-view dot, needs-action outline).\n backgroundColor: 'transparent',\n borderColor: e.color,\n textColor: 'inherit',\n extendedProps: { grid: e },\n }\n if (e.allDay) {\n const start = e.startDate ?? utcToDate(e.startUtc, zone)\n const end = e.endDate ?? (e.endUtc ? utcToDate(e.endUtc, zone) : addDays(start, 1))\n return { ...base, allDay: true, start, end: end > start ? end : addDays(start, 1) }\n }\n return { ...base, allDay: false, start: e.startUtc, end: e.endUtc }\n}\n","/**\n * The calendar surface: day / week / work week / month / agenda / year over FullCalendar v6\n * (MIT standard plugins), rendered in an explicit IANA zone through a Temporal-backed\n * NamedTimeZoneImpl — never the browser's zone, never raw UTC components.\n *\n * Props in, callbacks out: the host owns the data, the view and the anchor date. Toolbar buttons\n * and keyboard shortcuts move the calendar and report through `onViewChange` / `onDateChange` /\n * `onRangeChange`; a changed `view` / `date` prop moves it back.\n */\nimport { useCallback, useEffect, useMemo, useRef, useState, type CSSProperties } from 'react'\nimport FullCalendar from '@fullcalendar/react'\nimport dayGridPlugin from '@fullcalendar/daygrid'\nimport timeGridPlugin from '@fullcalendar/timegrid'\nimport listPlugin from '@fullcalendar/list'\nimport interactionPlugin, { type EventResizeDoneArg } from '@fullcalendar/interaction'\nimport multiMonthPlugin from '@fullcalendar/multimonth'\nimport type {\n AllDayContentArg,\n CalendarApi,\n DateSelectArg,\n DatesSetArg,\n DayHeaderContentArg,\n EventApi,\n EventClickArg,\n EventContentArg,\n EventDropArg,\n SlotLabelContentArg,\n} from '@fullcalendar/core'\nimport {\n ChevronLeft,\n ChevronRight,\n Lightbulb,\n ListTodo,\n Lock,\n MapPin,\n Repeat,\n Video,\n Workflow,\n} from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport type { CalendarGridProps, CalendarLabels, CalendarViewKind, GridEvent } from './types'\nimport { mergeLabels } from './labels'\nimport { NativeSelect } from './ui'\nimport { contrastText } from './colors'\nimport {\n addDays,\n convertWall,\n formatInZone,\n isValidTimeZone,\n safeZone,\n utcToDate,\n utcToTime,\n zoneCity,\n zoneOffsetLabel,\n} from './zone'\nimport {\n CALENDAR_NARROW_WIDTH,\n effectiveCalendarView,\n FC_VIEW,\n getTemporalTimeZonePlugin,\n NARROW_VIEWS,\n toBusinessHours,\n toEventInput,\n VIEW_OF_FC,\n VIEW_ORDER,\n viewLabel,\n workWeekHiddenDays,\n} from './grid-model'\n\nconst LAYER_ICON = { facts: Lightbulb, workflows: Workflow, tasks: ListTodo } as const\n\nfunction EventBody({ arg, labels }: { arg: EventContentArg; labels: CalendarLabels }) {\n const g = arg.event.extendedProps.grid as GridEvent | undefined\n if (!g) return <span>{arg.event.title}</span>\n const title = g.restricted ? labels.busy : g.title.trim() || labels.noTitle\n const type = arg.view.type\n const dot = type === 'dayGridMonth' && !arg.event.allDay\n const list = type.startsWith('list') || type === 'arbiAgenda'\n const style = {\n '--arbi-cal-color': g.color,\n '--arbi-cal-fg': contrastText(g.color),\n } as CSSProperties\n const OverlayIcon = g.layer !== 'event' ? LAYER_ICON[g.layer] : null\n const icons = (\n <>\n {OverlayIcon && <OverlayIcon className=\"arbi-cal-icon\" aria-hidden />}\n {g.restricted && <Lock className=\"arbi-cal-icon\" aria-hidden />}\n {g.isRecurring && <Repeat className=\"arbi-cal-icon\" aria-label={labels.recurring} />}\n {g.hasConference && <Video className=\"arbi-cal-icon\" aria-hidden />}\n </>\n )\n if (list) {\n return (\n <div\n className=\"arbi-cal-list-item\"\n style={style}\n data-testid=\"calendar-event\"\n data-instance-id={g.instanceId}\n >\n <span className=\"arbi-cal-title\">{title}</span>\n {icons}\n {g.location && !g.restricted && (\n <span className=\"arbi-cal-location\">\n <MapPin className=\"arbi-cal-icon\" aria-hidden />\n {g.location}\n </span>\n )}\n </div>\n )\n }\n if (dot) {\n return (\n <div\n className=\"arbi-cal-dot-item\"\n style={style}\n data-testid=\"calendar-event\"\n data-instance-id={g.instanceId}\n >\n <span className=\"arbi-cal-dot\" aria-hidden />\n {arg.timeText && <span className=\"arbi-cal-time\">{arg.timeText}</span>}\n <span className=\"arbi-cal-title\">{title}</span>\n </div>\n )\n }\n return (\n <div\n className=\"arbi-cal-event-inner\"\n style={style}\n data-testid=\"calendar-event\"\n data-instance-id={g.instanceId}\n >\n <div className=\"arbi-cal-event-line\">\n <span className=\"arbi-cal-title\">{title}</span>\n {icons}\n </div>\n {!arg.event.allDay && arg.timeText && <div className=\"arbi-cal-time\">{arg.timeText}</div>}\n {!arg.event.allDay && g.location && !g.restricted && (\n <div className=\"arbi-cal-location\">{g.location}</div>\n )}\n </div>\n )\n}\n\nfunction isTypingTarget(t: EventTarget | null): boolean {\n if (!(t instanceof HTMLElement)) return false\n const tag = t.tagName\n return tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT' || t.isContentEditable\n}\n\n// ── component ───────────────────────────────────────────────────────────────────\n\nexport function CalendarGrid({\n events,\n view,\n date,\n timeZone,\n secondaryTimeZone,\n weekStart,\n workingHours,\n showWeekNumbers = false,\n onRangeChange,\n onSelectSlot,\n onEventClick,\n onEventChange,\n onViewChange,\n onDateChange,\n onCreateShortcut,\n height,\n labels: labelOverrides,\n toolbarEnd,\n className,\n}: CalendarGridProps) {\n const labels = useMemo(() => mergeLabels(labelOverrides), [labelOverrides])\n const zone = safeZone(timeZone)\n const secondZone =\n secondaryTimeZone && secondaryTimeZone !== zone && isValidTimeZone(secondaryTimeZone)\n ? secondaryTimeZone\n : ''\n const rootRef = useRef<HTMLDivElement>(null)\n const calRef = useRef<FullCalendar>(null)\n const [narrow, setNarrow] = useState(false)\n const [title, setTitle] = useState('')\n const lastRange = useRef('')\n const effective = effectiveCalendarView(view, narrow)\n\n // Callbacks change identity every render; FullCalendar options read them through a ref.\n const cb = useRef({\n onRangeChange,\n onSelectSlot,\n onEventClick,\n onEventChange,\n onViewChange,\n onDateChange,\n onCreateShortcut,\n })\n cb.current = {\n onRangeChange,\n onSelectSlot,\n onEventClick,\n onEventChange,\n onViewChange,\n onDateChange,\n onCreateShortcut,\n }\n\n const api = useCallback((): CalendarApi | null => calRef.current?.getApi() ?? null, [])\n\n // Phone layout by container width.\n useEffect(() => {\n const el = rootRef.current\n if (!el || typeof ResizeObserver === 'undefined') return\n const ro = new ResizeObserver(([entry]) => {\n setNarrow(entry.contentRect.width > 0 && entry.contentRect.width < CALENDAR_NARROW_WIDTH)\n })\n ro.observe(el)\n return () => ro.disconnect()\n }, [])\n\n // Follow the controlled view / date.\n useEffect(() => {\n const a = api()\n if (!a) return\n const fcView = FC_VIEW[effective]\n if (a.view.type !== fcView) {\n a.changeView(fcView, date)\n return\n }\n if (utcToDate(a.getDate(), zone) !== date) a.gotoDate(date)\n }, [api, effective, date, zone])\n\n const fcEvents = useMemo(() => events.map((e) => toEventInput(e, zone)), [events, zone])\n\n const changeView = useCallback(\n (v: CalendarViewKind) => {\n const a = api()\n if (a) a.changeView(FC_VIEW[effectiveCalendarView(v, narrow)])\n cb.current.onViewChange?.(v)\n },\n [api, narrow]\n )\n const nav = useCallback(\n (dir: 'prev' | 'next' | 'today') => {\n const a = api()\n if (!a) return\n if (dir === 'prev') a.prev()\n else if (dir === 'next') a.next()\n else a.gotoDate(utcToDate(Date.now(), zone))\n },\n [api, zone]\n )\n\n // Keyboard shortcuts (t, d/w/x/m/a/y, j/k/n/p/←/→, c).\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.defaultPrevented || e.metaKey || e.ctrlKey || e.altKey || isTypingTarget(e.target))\n return\n if (\n typeof document !== 'undefined' &&\n document.querySelector('[role=\"dialog\"], [role=\"alertdialog\"]')\n )\n return\n const viewKey: Record<string, CalendarViewKind> = {\n d: 'day',\n w: 'week',\n x: 'work_week',\n m: 'month',\n a: 'agenda',\n y: 'year',\n }\n const k = e.key.length === 1 ? e.key.toLowerCase() : e.key\n if (k === 't') nav('today')\n else if (k === 'j' || k === 'n' || k === 'ArrowRight') nav('next')\n else if (k === 'k' || k === 'p' || k === 'ArrowLeft') nav('prev')\n else if (viewKey[k]) changeView(viewKey[k])\n else if (k === 'c' && cb.current.onCreateShortcut) cb.current.onCreateShortcut()\n else return\n e.preventDefault()\n }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [nav, changeView])\n\n const onDatesSet = useCallback(\n (arg: DatesSetArg) => {\n setTitle(arg.view.title)\n const anchor = utcToDate(arg.view.calendar.getDate(), zone)\n const kind = VIEW_OF_FC[arg.view.type] ?? effective\n const key = `${kind}|${arg.start.toISOString()}|${arg.end.toISOString()}|${anchor}`\n if (key === lastRange.current) return\n lastRange.current = key\n cb.current.onRangeChange({ start: arg.start, end: arg.end, view: kind, date: anchor })\n if (anchor !== date) cb.current.onDateChange?.(anchor)\n },\n [zone, effective, date]\n )\n\n const onSelect = useCallback(\n (arg: DateSelectArg) => {\n if (!cb.current.onSelectSlot) return\n if (arg.allDay) {\n cb.current.onSelectSlot({\n startUtc: arg.start.toISOString(),\n endUtc: arg.end.toISOString(),\n allDay: true,\n startDate: arg.startStr.slice(0, 10),\n endDate: arg.endStr.slice(0, 10),\n })\n } else {\n cb.current.onSelectSlot({\n startUtc: arg.start.toISOString(),\n endUtc: arg.end.toISOString(),\n allDay: false,\n })\n }\n api()?.unselect()\n },\n [api]\n )\n\n const emitChange = useCallback((event: EventApi, revert: () => void) => {\n const g = event.extendedProps.grid as GridEvent | undefined\n if (!g || !cb.current.onEventChange || !event.start) {\n revert()\n return\n }\n const start = event.start\n if (event.allDay) {\n const startDate = event.startStr.slice(0, 10)\n const endDate = event.endStr ? event.endStr.slice(0, 10) : addDays(startDate, 1)\n const end = event.end ?? new Date(start.getTime() + 86_400_000)\n cb.current.onEventChange({\n instanceId: g.instanceId,\n eventId: g.eventId,\n startUtc: start.toISOString(),\n endUtc: end.toISOString(),\n allDay: true,\n startDate,\n endDate,\n revert,\n })\n return\n }\n const end = event.end ?? new Date(start.getTime() + 3_600_000)\n cb.current.onEventChange({\n instanceId: g.instanceId,\n eventId: g.eventId,\n startUtc: start.toISOString(),\n endUtc: end.toISOString(),\n allDay: false,\n revert,\n })\n }, [])\n\n const slotLabelContent = useCallback(\n (arg: SlotLabelContentArg) => {\n if (!secondZone) return arg.text\n return (\n <div className=\"arbi-cal-slot-labels\">\n <span className=\"arbi-cal-slot-secondary\">\n {(() => {\n // FullCalendar anchors slot-label dates on a fixed (winter) day, so its instant can carry\n // the wrong DST offset: convert the primary wall time on the visible date instead.\n const t = convertWall(`${date}T${utcToTime(arg.date, zone)}`, zone, secondZone).slice(\n 11,\n 16\n )\n return t.endsWith(':00') ? t.slice(0, 2) : t\n })()}\n </span>\n <span className=\"arbi-cal-slot-primary\">{arg.text}</span>\n </div>\n )\n },\n [secondZone, zone, date]\n )\n\n const allDayContent = useCallback(\n (arg: AllDayContentArg) => {\n if (!secondZone) return arg.text\n return (\n <div className=\"arbi-cal-slot-labels arbi-cal-zone-labels\">\n <span className=\"arbi-cal-slot-secondary\" title={secondZone}>\n {zoneOffsetLabel(secondZone)}\n </span>\n <span className=\"arbi-cal-slot-primary\" title={zone}>\n {zoneOffsetLabel(zone)}\n </span>\n </div>\n )\n },\n [secondZone, zone]\n )\n\n const dayHeaderContent = useCallback(\n (arg: DayHeaderContentArg) => {\n const t = arg.view.type\n if (!t.startsWith('timeGrid') && t !== 'arbiWorkWeek') return arg.text\n return (\n <div className={cn('arbi-cal-dayhead', arg.isToday && 'arbi-cal-dayhead-today')}>\n <span className=\"arbi-cal-dayhead-dow\">\n {formatInZone(arg.date, zone, { weekday: 'short' })}\n </span>\n <span className=\"arbi-cal-dayhead-num\">\n {formatInZone(arg.date, zone, { day: 'numeric' })}\n </span>\n </div>\n )\n },\n [zone]\n )\n\n const scrollTime = useMemo(() => {\n const starts = (workingHours ?? []).map((h) => h.start).sort()\n const first = starts[0] ?? '08:00'\n const h = Math.max(0, Number(first.slice(0, 2)) - 1)\n return `${String(h).padStart(2, '0')}:00:00`\n }, [workingHours])\n\n const views = useMemo(\n () => ({\n arbiWorkWeek: {\n type: 'timeGrid',\n duration: { weeks: 1 },\n hiddenDays: workWeekHiddenDays(workingHours),\n buttonText: labels.workWeek,\n },\n arbiAgenda: {\n type: 'list',\n duration: { days: 14 },\n dateAlignment: 'day',\n buttonText: labels.agenda,\n },\n multiMonthYear: { multiMonthMaxColumns: narrow ? 1 : 3 },\n // Growing rows (height auto) never overflow, so cap explicitly there; else fit the cell.\n dayGridMonth: { dayMaxEvents: height === 'auto' ? 3 : true },\n }),\n [workingHours, labels, narrow, height]\n )\n\n const plugins = useMemo(\n () => [\n dayGridPlugin,\n timeGridPlugin,\n listPlugin,\n interactionPlugin,\n multiMonthPlugin,\n getTemporalTimeZonePlugin(),\n ],\n []\n )\n\n const viewChoices = narrow ? NARROW_VIEWS : VIEW_ORDER\n\n return (\n <div\n ref={rootRef}\n className={cn(\n 'arbi-calendar flex h-full min-h-0 flex-col',\n narrow && 'arbi-calendar-narrow',\n secondZone && 'arbi-cal-dual',\n className\n )}\n data-testid=\"calendar-grid\"\n data-view={effective}\n data-time-zone={zone}\n >\n <div\n className=\"arbi-cal-toolbar flex flex-wrap items-center gap-2 px-1 pb-2\"\n data-testid=\"calendar-toolbar\"\n >\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => nav('today')}\n data-testid=\"calendar-today\"\n >\n {labels.today}\n </Button>\n <div className=\"flex items-center\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={labels.previous}\n onClick={() => nav('prev')}\n data-testid=\"calendar-prev\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={labels.next}\n onClick={() => nav('next')}\n data-testid=\"calendar-next\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n <h2\n className=\"min-w-0 flex-1 truncate text-base font-semibold sm:text-lg\"\n data-testid=\"calendar-title\"\n aria-live=\"polite\"\n >\n {title}\n </h2>\n {secondZone && !narrow && (\n <span\n className=\"hidden text-xs text-muted-foreground md:inline\"\n data-testid=\"calendar-zones\"\n >\n {zoneCity(zone)} {zoneOffsetLabel(zone)} · {zoneCity(secondZone)}{' '}\n {zoneOffsetLabel(secondZone)}\n </span>\n )}\n {narrow ? (\n <NativeSelect\n aria-label={labels.view}\n value={effective}\n onChange={(e) => changeView(e.target.value as CalendarViewKind)}\n data-testid=\"calendar-view-select\"\n className=\"h-8\"\n >\n {viewChoices.map((v) => (\n <option key={v} value={v}>\n {viewLabel(v, labels)}\n </option>\n ))}\n </NativeSelect>\n ) : (\n <div\n className=\"inline-flex rounded-md border border-border p-0.5\"\n role=\"group\"\n data-testid=\"calendar-view-switch\"\n >\n {viewChoices.map((v) => (\n <button\n key={v}\n type=\"button\"\n aria-pressed={effective === v}\n onClick={() => changeView(v)}\n data-testid={`calendar-view-${v}`}\n className={cn(\n 'rounded px-2.5 py-1 text-xs font-medium transition-colors',\n effective === v\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground'\n )}\n >\n {viewLabel(v, labels)}\n </button>\n ))}\n </div>\n )}\n {toolbarEnd}\n </div>\n <div className=\"arbi-cal-body min-h-0 flex-1\">\n <FullCalendar\n ref={calRef}\n plugins={plugins}\n timeZone={zone}\n initialView={FC_VIEW[effective]}\n initialDate={date}\n headerToolbar={false}\n height={height ?? '100%'}\n views={views}\n events={fcEvents}\n firstDay={weekStart}\n weekNumbers={showWeekNumbers}\n weekNumberCalculation={weekStart === 1 ? 'ISO' : 'local'}\n weekText={labels.weekAbbrev}\n nowIndicator\n businessHours={toBusinessHours(workingHours)}\n scrollTime={scrollTime}\n slotDuration=\"00:30:00\"\n snapDuration=\"00:15:00\"\n slotLabelFormat={{\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'short',\n }}\n eventTimeFormat={{\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'short',\n }}\n allDayText={labels.allDay}\n noEventsText={labels.noEvents}\n moreLinkText={labels.more}\n navLinks\n navLinkDayClick={(d) => {\n const a = api()\n a?.changeView(FC_VIEW.day, d)\n cb.current.onViewChange?.('day')\n }}\n selectable={!!onSelectSlot}\n selectMirror\n unselectAuto\n editable={!!onEventChange}\n eventResizableFromStart\n eventStartEditable={!!onEventChange}\n eventDurationEditable={!!onEventChange}\n stickyHeaderDates\n expandRows\n dayMaxEvents={height === 'auto' ? 3 : true}\n eventDisplay=\"auto\"\n datesSet={onDatesSet}\n select={onSelect}\n eventClick={(arg: EventClickArg) => {\n arg.jsEvent.preventDefault()\n const g = arg.event.extendedProps.grid as GridEvent | undefined\n if (g) cb.current.onEventClick?.(g.instanceId, g.eventId)\n }}\n eventDrop={(arg: EventDropArg) => emitChange(arg.event, arg.revert)}\n eventResize={(arg: EventResizeDoneArg) => emitChange(arg.event, arg.revert)}\n eventContent={(arg: EventContentArg) => <EventBody arg={arg} labels={labels} />}\n slotLabelContent={slotLabelContent}\n allDayContent={allDayContent}\n dayHeaderContent={dayHeaderContent}\n />\n </div>\n </div>\n )\n}\n","/** Compact month navigator (sidebar): pick a day; highlights today (in the user's zone) and the visible range. */\nimport { useMemo, useState } from 'react'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport type { MiniMonthProps } from './types'\nimport { mergeLabels } from './labels'\nimport {\n addDays,\n addMonths,\n formatPlainDate,\n isoWeekNumber,\n startOfWeek,\n todayInZone,\n} from './zone'\n\nexport function MiniMonth({\n date,\n weekStart,\n timeZone,\n onSelect,\n highlightRange,\n showWeekNumbers,\n labels: labelOverrides,\n className,\n}: MiniMonthProps) {\n const labels = mergeLabels(labelOverrides)\n const [view, setView] = useState(() => ({ for: date, month: `${date.slice(0, 7)}-01` }))\n // Follow the selected date into another month (state adjusted during render, not in an effect).\n if (view.for !== date) setView({ for: date, month: `${date.slice(0, 7)}-01` })\n const month = view.for === date ? view.month : `${date.slice(0, 7)}-01`\n const setMonth = (m: string) => setView({ for: date, month: m })\n\n const today = todayInZone(timeZone)\n const days = useMemo(() => {\n const first = startOfWeek(month, weekStart)\n return Array.from({ length: 42 }, (_, i) => addDays(first, i))\n }, [month, weekStart])\n const weekdays = days.slice(0, 7).map((d) => formatPlainDate(d, { weekday: 'narrow' }))\n const monthTitle = formatPlainDate(month, { month: 'long', year: 'numeric' })\n\n return (\n <div className={cn('select-none text-xs', className)} data-testid=\"calendar-mini-month\">\n <div className=\"mb-1 flex items-center justify-between px-1\">\n <span className=\"text-sm font-medium\" aria-live=\"polite\">\n {monthTitle}\n </span>\n <div className=\"flex\">\n <button\n type=\"button\"\n className=\"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={labels.previous}\n onClick={() => setMonth(addMonths(month, -1))}\n data-testid=\"calendar-mini-prev\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n className=\"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={labels.next}\n onClick={() => setMonth(addMonths(month, 1))}\n data-testid=\"calendar-mini-next\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n <div\n className={cn(\n 'grid gap-y-0.5 text-center',\n showWeekNumbers ? 'grid-cols-8' : 'grid-cols-7'\n )}\n role=\"grid\"\n aria-label={monthTitle}\n >\n {showWeekNumbers && (\n <span className=\"py-1 text-[10px] text-muted-foreground\">{labels.weekAbbrev}</span>\n )}\n {weekdays.map((w, i) => (\n <span\n key={i}\n className=\"py-1 text-[10px] font-medium uppercase text-muted-foreground\"\n role=\"columnheader\"\n >\n {w}\n </span>\n ))}\n {days.map((d, i) => {\n const inMonth = d.slice(0, 7) === month.slice(0, 7)\n const inRange = !!highlightRange && d >= highlightRange.start && d <= highlightRange.end\n const selected = d === date\n const isToday = d === today\n return (\n <MiniDay\n key={d}\n d={d}\n weekCell={showWeekNumbers && i % 7 === 0 ? isoWeekNumber(d) : null}\n inMonth={inMonth}\n inRange={inRange}\n selected={selected}\n isToday={isToday}\n onSelect={onSelect}\n />\n )\n })}\n </div>\n </div>\n )\n}\n\nfunction MiniDay({\n d,\n weekCell,\n inMonth,\n inRange,\n selected,\n isToday,\n onSelect,\n}: {\n d: string\n weekCell: number | null\n inMonth: boolean\n inRange: boolean\n selected: boolean\n isToday: boolean\n onSelect: (date: string) => void\n}) {\n return (\n <>\n {weekCell !== null && (\n <span className=\"flex items-center justify-center text-[10px] text-muted-foreground\">\n {weekCell}\n </span>\n )}\n <span className={cn('flex items-center justify-center', inRange && 'bg-primary/10')}>\n <button\n type=\"button\"\n role=\"gridcell\"\n aria-selected={selected}\n aria-current={isToday ? 'date' : undefined}\n aria-label={formatPlainDate(d, { dateStyle: 'full' })}\n onClick={() => onSelect(d)}\n data-testid={`calendar-mini-day-${d}`}\n className={cn(\n 'flex h-7 w-7 items-center justify-center rounded-full tabular-nums transition-colors',\n !inMonth && 'text-muted-foreground/60',\n isToday && !selected && 'font-semibold text-primary',\n selected ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n )}\n >\n {Number(d.slice(8, 10))}\n </button>\n </span>\n </>\n )\n}\n","/** Sidebar list of calendars (grouped: mine / shared / workspace / subscribed) plus overlay toggles. */\nimport { EllipsisVertical, Lightbulb, ListTodo, Lock, Plus, Workflow } from 'lucide-react'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport type { CalendarLabels, CalendarListItem, CalendarListProps, OverlayLayer } from './types'\nimport { mergeLabels } from './labels'\nimport { ColorSwatches } from './ui'\n\nconst GROUPS: CalendarListItem['group'][] = ['mine', 'shared', 'workspace', 'subscribed', 'rooms']\n\nconst groupLabel = (g: CalendarListItem['group'], l: CalendarLabels) =>\n ({\n mine: l.myCalendars,\n shared: l.sharedCalendars,\n workspace: l.workspaceCalendars,\n subscribed: l.subscribedCalendars,\n rooms: l.rooms,\n })[g]\n\nfunction Swatch({ color, checked }: { color: string; checked: boolean }) {\n return (\n <span\n className=\"flex h-4 w-4 shrink-0 items-center justify-center rounded-[4px] border-2\"\n style={{ borderColor: color, backgroundColor: checked ? color : 'transparent' }}\n aria-hidden\n >\n {checked && (\n <svg viewBox=\"0 0 12 12\" className=\"h-3 w-3\" fill=\"none\" stroke=\"white\" strokeWidth=\"2\">\n <path d=\"M2.5 6.5l2.5 2.5 4.5-5\" />\n </svg>\n )}\n </span>\n )\n}\n\nexport function CalendarList({\n calendars,\n overlays,\n onToggleHidden,\n onColorChange,\n onToggleOverlay,\n onCreate,\n onEdit,\n onImport,\n onExport,\n onDelete,\n onShare,\n onRefresh,\n onPublish,\n onSubscribe,\n onAddHolidays,\n onImportFile,\n labels: labelOverrides,\n className,\n}: CalendarListProps) {\n const l = mergeLabels(labelOverrides)\n const hasAddMenu = !!(onSubscribe || onAddHolidays || onImportFile)\n const plusButton = (\n <button\n type=\"button\"\n className=\"rounded p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={hasAddMenu ? l.addCalendar : l.createCalendar}\n title={hasAddMenu ? l.addCalendar : l.createCalendar}\n onClick={hasAddMenu ? undefined : onCreate}\n data-testid=\"calendar-list-create\"\n >\n <Plus className=\"h-4 w-4\" />\n </button>\n )\n const overlayRows: [OverlayLayer, string, typeof Lightbulb][] = [\n ['facts', l.facts, Lightbulb],\n ['workflows', l.workflows, Workflow],\n ['tasks', l.tasks, ListTodo],\n ]\n return (\n <div className={cn('space-y-3 text-sm', className)} data-testid=\"calendar-list\">\n {GROUPS.map((g) => {\n const items = calendars.filter((c) => c.group === g)\n if (!items.length && g !== 'mine') return null\n return (\n <section key={g} aria-label={groupLabel(g, l)}>\n <div className=\"flex items-center justify-between px-1 pb-1\">\n <h4 className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {groupLabel(g, l)}\n </h4>\n {g === 'mine' &&\n (hasAddMenu ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>{plusButton}</DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-56\"\n data-testid=\"calendar-add-menu\"\n >\n <DropdownMenuItem onSelect={onCreate} data-testid=\"calendar-add-new\">\n {l.createCalendar}\n </DropdownMenuItem>\n {onSubscribe && (\n <DropdownMenuItem\n onSelect={onSubscribe}\n data-testid=\"calendar-add-subscribe\"\n >\n {l.subscribeFromUrl}\n </DropdownMenuItem>\n )}\n {onAddHolidays && (\n <DropdownMenuItem\n onSelect={onAddHolidays}\n data-testid=\"calendar-add-holidays\"\n >\n {l.addHolidays}\n </DropdownMenuItem>\n )}\n {onImportFile && (\n <DropdownMenuItem onSelect={onImportFile} data-testid=\"calendar-add-import\">\n {l.importIcs}\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : (\n plusButton\n ))}\n </div>\n <ul className=\"space-y-0.5\">\n {items.map((c) => {\n const name = c.locked ? l.locked : c.name || l.noTitle\n const isOwner = c.role === 'owner'\n return (\n <li\n key={c.id}\n className=\"group flex items-center gap-2 rounded-md px-1 py-1 hover:bg-muted/60\"\n data-testid={`calendar-list-item-${c.id}`}\n >\n <label className=\"flex min-w-0 flex-1 cursor-pointer items-center gap-2\">\n <input\n type=\"checkbox\"\n className=\"sr-only\"\n checked={!c.hidden}\n onChange={() => onToggleHidden(c.id)}\n aria-label={`${c.hidden ? l.showCalendar : l.hideCalendar} ${name}`}\n data-testid={`calendar-list-toggle-${c.id}`}\n />\n <Swatch color={c.color} checked={!c.hidden} />\n <span\n className={cn(\n 'min-w-0 truncate',\n c.locked && 'italic text-muted-foreground'\n )}\n >\n {name}\n </span>\n {c.locked && (\n <Lock className=\"h-3 w-3 shrink-0 text-muted-foreground\" aria-hidden />\n )}\n {c.provider && c.provider !== 'native' && (\n <span\n className=\"shrink-0 rounded border border-border px-1 text-[10px] leading-4 text-muted-foreground\"\n data-testid={`calendar-list-provider-${c.id}`}\n >\n {(\n {\n google: 'Google',\n microsoft: 'Outlook',\n caldav: 'CalDAV',\n ics: 'ICS',\n } as Record<string, string>\n )[c.provider] ?? c.provider}\n </span>\n )}\n </label>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"rounded p-0.5 text-muted-foreground opacity-60 hover:bg-muted hover:text-foreground group-hover:opacity-100 focus-visible:opacity-100\"\n aria-label={`${l.editCalendar}: ${name}`}\n data-testid={`calendar-list-menu-${c.id}`}\n >\n <EllipsisVertical className=\"h-4 w-4\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n <DropdownMenuLabel className=\"text-xs\">{l.calendarColor}</DropdownMenuLabel>\n <div className=\"px-2 pb-2\">\n <ColorSwatches\n value={c.color}\n onChange={(color) => color && onColorChange(c.id, color)}\n />\n </div>\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => onEdit(c.id)} disabled={c.locked}>\n {l.editCalendar}\n </DropdownMenuItem>\n {onShare && isOwner && c.group !== 'subscribed' && (\n <DropdownMenuItem\n onSelect={() => onShare(c.id)}\n disabled={c.locked}\n data-testid={`calendar-list-share-${c.id}`}\n >\n {l.shareCalendar}\n </DropdownMenuItem>\n )}\n {onPublish &&\n isOwner &&\n c.group === 'mine' &&\n (!c.provider || c.provider === 'native') && (\n <DropdownMenuItem\n onSelect={() => onPublish(c.id)}\n disabled={c.locked}\n data-testid={`calendar-list-publish-${c.id}`}\n >\n {l.publishTo}\n </DropdownMenuItem>\n )}\n {onRefresh && c.group === 'subscribed' && (\n <DropdownMenuItem\n onSelect={() => onRefresh(c.id)}\n data-testid={`calendar-list-refresh-${c.id}`}\n >\n {l.refreshCalendar}\n </DropdownMenuItem>\n )}\n {c.canWrite && (\n <DropdownMenuItem onSelect={() => onImport(c.id)} disabled={c.locked}>\n {l.importCalendar}\n </DropdownMenuItem>\n )}\n <DropdownMenuItem onSelect={() => onExport(c.id)} disabled={c.locked}>\n {l.exportCalendar}\n </DropdownMenuItem>\n {isOwner && !c.isDefault && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n className=\"text-destructive focus:text-destructive\"\n onSelect={() => onDelete(c.id)}\n >\n {l.deleteCalendar}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </li>\n )\n })}\n </ul>\n </section>\n )\n })}\n\n <section aria-label={l.overlays}>\n <h4 className=\"px-1 pb-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {l.overlays}\n </h4>\n <ul className=\"space-y-0.5\">\n {overlayRows.map(([layer, label, Icon]) => (\n <li key={layer}>\n <label className=\"flex cursor-pointer items-center gap-2 rounded-md px-1 py-1 hover:bg-muted/60\">\n <input\n type=\"checkbox\"\n className=\"h-4 w-4 accent-[hsl(var(--primary))]\"\n checked={overlays[layer]}\n onChange={() => onToggleOverlay(layer)}\n data-testid={`calendar-overlay-${layer}`}\n />\n <Icon className=\"h-3.5 w-3.5 text-muted-foreground\" aria-hidden />\n <span>{label}</span>\n </label>\n </li>\n ))}\n </ul>\n </section>\n </div>\n )\n}\n","/** Online meetings of events: whether one can be joined now, and what is still to come. */\nimport type { CalendarEvent } from '@arbidocs/react'\n\n/** Join opens 10 minutes before the start and closes at the end. */\nexport const JOIN_EARLY_MS = 10 * 60_000\n\n/** Turn a plain phone number into a dialable conference URI; pass web links and explicit URIs through. */\nexport function normalizeConferenceAddress(value: string): string {\n const trimmed = value.trim()\n if (/^https?:\\/\\//i.test(trimmed) || /^tel:/i.test(trimmed)) return trimmed\n const digits = trimmed.replace(/\\D/g, '')\n if (digits.length >= 7 && /^[+\\d\\s().-]+$/.test(trimmed))\n return `tel:${trimmed.replace(/[\\s().-]/g, '')}`\n return trimmed\n}\n\nexport function conferenceUrl(event: Pick<CalendarEvent, 'conference'>): string | null {\n const url = event.conference?.url\n return url && /^(https?:\\/\\/|tel:)/i.test(url) ? url : null\n}\n\nexport function canJoinEvent(\n event: Pick<CalendarEvent, 'conference' | 'start_utc' | 'end_utc'>,\n now: number = Date.now()\n): boolean {\n if (!conferenceUrl(event)) return false\n return (\n now >= new Date(event.start_utc).getTime() - JOIN_EARLY_MS &&\n now <= new Date(event.end_utc).getTime()\n )\n}\n\n/** Events still to come (or in progress), soonest first, declined ones left out unless asked. */\nexport function upcomingOf(\n events: CalendarEvent[],\n now: number,\n {\n showDeclined = false,\n hidden = new Set<string>(),\n }: { showDeclined?: boolean; hidden?: Set<string> } = {}\n): CalendarEvent[] {\n return events\n .filter((e) => Date.parse(e.end_utc) > now)\n .filter((e) => showDeclined || e.my_partstat !== 'declined')\n .filter((e) => e.status !== 'cancelled' && !hidden.has(e.calendar_id))\n .sort((a, b) => a.start_utc.localeCompare(b.start_utc))\n}\n","/**\n * Pure helpers over `EventDraft`: start/end edits that keep the duration, the all-day toggle,\n * a draft from a grid selection, validation. Zone math goes through ./zone (Temporal).\n */\nimport type {\n AttendeeDraft,\n ConferenceDraft,\n DateTimeSpec,\n EventDraft,\n SlotSelection,\n} from './types'\nimport { addDays, diffDays, safeZone, utcToDate, utcToWall, wallToEpochMs } from './zone'\n\nexport const isAllDayDraft = (d: Pick<EventDraft, 'start'>): boolean => !!d.start.date\n\nconst datePart = (spec: DateTimeSpec): string => spec.date ?? (spec.date_time ?? '').slice(0, 10)\nconst timePart = (spec: DateTimeSpec): string => (spec.date_time ?? '').slice(11, 16)\n\n/** The zone a spec's wall time is in (floating → the default). */\nconst specZone = (spec: DateTimeSpec, defaultZone: string): string =>\n safeZone(spec.time_zone, defaultZone)\n\n/** Date (YYYY-MM-DD) of a spec as written. */\nexport const specDate = datePart\n/** Time (HH:MM) of a spec as written ('' for all-day). */\nexport const specTime = timePart\n\n/** Epoch ms of a timed spec. */\nfunction specEpochMs(spec: DateTimeSpec, defaultZone: string): number {\n if (spec.date) return wallToEpochMs(spec.date, defaultZone)\n return wallToEpochMs(spec.date_time ?? '', specZone(spec, defaultZone))\n}\n\n/** Start/end instants of a draft (all-day: midnight of the start day / exclusive end day in the default zone). */\nexport function draftRangeUtc(\n d: EventDraft,\n defaultZone: string\n): { startMs: number; endMs: number } {\n return { startMs: specEpochMs(d.start, defaultZone), endMs: specEpochMs(d.end, defaultZone) }\n}\n\n/** The inclusive last day shown for an all-day draft (API end date is exclusive). */\nexport function allDayInclusiveEnd(d: EventDraft): string {\n const start = d.start.date ?? ''\n const end = d.end.date ?? start\n const last = addDays(end, -1)\n return last < start ? start : last\n}\n\nfunction timedSpec(date: string, time: string, zone: string | null | undefined): DateTimeSpec {\n return { date: null, date_time: `${date}T${time || '00:00'}`, time_zone: zone ?? null }\n}\n\n/**\n * Change the start (date, time and/or zone) and move the end by the same amount, the way every\n * calendar app does. The end keeps its own zone.\n */\nexport function setDraftStart(\n d: EventDraft,\n change: { date?: string; time?: string; timeZone?: string | null },\n defaultZone: string\n): EventDraft {\n if (isAllDayDraft(d)) {\n const oldStart = d.start.date ?? change.date ?? ''\n const start = change.date ?? oldStart\n const days = Math.max(1, diffDays(oldStart, d.end.date ?? addDays(oldStart, 1)))\n return { ...d, start: { date: start }, end: { date: addDays(start, days) } }\n }\n const { startMs, endMs } = draftRangeUtc(d, defaultZone)\n const duration = Math.max(0, endMs - startMs)\n const startZone = change.timeZone !== undefined ? change.timeZone : (d.start.time_zone ?? null)\n const start = timedSpec(\n change.date ?? datePart(d.start),\n change.time ?? timePart(d.start),\n startZone\n )\n const newStartMs = specEpochMs(start, defaultZone)\n const endZone = specZone(d.end, defaultZone)\n const endWall = utcToWall(newStartMs + duration, endZone)\n return {\n ...d,\n start,\n end: { date: null, date_time: endWall, time_zone: d.end.time_zone ?? null },\n }\n}\n\n/** Change the end (date, time and/or zone) only. All-day `date` is the inclusive last day. */\nexport function setDraftEnd(\n d: EventDraft,\n change: { date?: string; time?: string; timeZone?: string | null }\n): EventDraft {\n if (isAllDayDraft(d)) {\n const last = change.date ?? allDayInclusiveEnd(d)\n return { ...d, end: { date: addDays(last, 1) } }\n }\n const zone = change.timeZone !== undefined ? change.timeZone : (d.end.time_zone ?? null)\n return {\n ...d,\n end: timedSpec(change.date ?? datePart(d.end), change.time ?? timePart(d.end), zone),\n }\n}\n\n/** Toggle all-day. Turning it off gives a timed event at `defaultStartTime` for `defaultDurationMinutes`. */\nexport function setDraftAllDay(\n d: EventDraft,\n allDay: boolean,\n defaultZone: string,\n defaultStartTime = '09:00',\n defaultDurationMinutes = 60\n): EventDraft {\n if (allDay === isAllDayDraft(d)) return d\n if (allDay) {\n const start = datePart(d.start)\n const endDay = datePart(d.end) || start\n // A timed event ending at 00:00 the next day covers one day.\n const lastDay = timePart(d.end) === '00:00' && endDay > start ? addDays(endDay, -1) : endDay\n return {\n ...d,\n start: { date: start },\n end: { date: addDays(lastDay < start ? start : lastDay, 1) },\n }\n }\n const zone = safeZone(defaultZone)\n const start = timedSpec(d.start.date ?? '', defaultStartTime, zone)\n const startMs = specEpochMs(start, zone)\n const end: DateTimeSpec = {\n date: null,\n date_time: utcToWall(startMs + defaultDurationMinutes * 60_000, zone),\n time_zone: zone,\n }\n return { ...d, start, end }\n}\n\n/** A new draft from a grid selection, in the user's zone. */\nexport function draftFromSlot(\n slot: SlotSelection,\n timeZone: string,\n calendarId?: string,\n title = ''\n): EventDraft {\n const zone = safeZone(timeZone)\n if (slot.allDay) {\n const start = slot.startDate ?? utcToDate(slot.startUtc, zone)\n const end = slot.endDate ?? addDays(start, 1)\n return { calendar_id: calendarId, title, start: { date: start }, end: { date: end } }\n }\n return {\n calendar_id: calendarId,\n title,\n start: { date: null, date_time: utcToWall(slot.startUtc, zone), time_zone: zone },\n end: { date: null, date_time: utcToWall(slot.endUtc, zone), time_zone: zone },\n }\n}\n\nexport type DraftError = 'titleRequired' | 'invalidRange'\n\n/** First problem that blocks saving, or null. */\nexport function validateDraft(d: EventDraft, defaultZone: string): DraftError | null {\n if (!d.title.trim()) return 'titleRequired'\n if (isAllDayDraft(d)) {\n if (!d.start.date || !d.end.date || d.end.date <= d.start.date) return 'invalidRange'\n return null\n }\n if (!d.start.date_time || !d.end.date_time) return 'invalidRange'\n const { startMs, endMs } = draftRangeUtc(d, defaultZone)\n if (!(endMs >= startMs)) return 'invalidRange'\n return null\n}\n\n/** The label stored on an ARBI webinar's conference (data, not display text: it marks the event a webinar). */\nexport const ARBI_WEBINAR_LABEL = 'ARBI webinar'\n\n/** An ARBI conference that is a webinar (the editor's `kind`, or the label stored with the event). */\nexport const isWebinarConference = (\n c: Pick<ConferenceDraft, 'type' | 'label' | 'kind'> | null | undefined\n): boolean => c?.type === 'arbi' && (c.kind === 'webinar' || c.label === ARBI_WEBINAR_LABEL)\n\n/** The key of an attendee in `ConferenceDraft.roles`: its e-mail (lower-cased), else its user id. */\nexport const attendeeKey = (a: Pick<AttendeeDraft, 'email' | 'user_id'>): string =>\n a.email?.toLowerCase() || a.user_id || ''\n","/**\n * RRULE (RFC 5545) ↔ the event editor's recurrence form.\n *\n * The form covers what Outlook / Google offer in their \"custom recurrence\" dialogs: daily, weekly on\n * chosen weekdays, monthly on a day of the month or on the nth / last weekday (BYSETPOS), yearly on a\n * date or on the nth / last weekday of a month, every N periods, ending never / on a date / after N\n * occurrences. Anything else round-trips untouched as a raw custom rule. The backend validates.\n */\nimport { Temporal } from 'temporal-polyfill'\nimport { wallToUtc } from './zone'\n\nexport const RRULE_WEEKDAYS = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU'] as const\nexport type RRuleWeekday = (typeof RRULE_WEEKDAYS)[number]\n\nexport type RecurrenceFrequency = 'none' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'custom'\n/** 1..4 = first..fourth, -1 = last. */\nexport type SetPos = 1 | 2 | 3 | 4 | -1\n\nexport interface RecurrenceForm {\n freq: RecurrenceFrequency\n interval: number\n /** Weekly: the chosen days. */\n weekdays: RRuleWeekday[]\n /** Monthly / yearly: on a day of the month, or on the nth weekday. */\n monthlyMode: 'day' | 'weekday'\n monthDay: number\n setPos: SetPos\n setPosDay: RRuleWeekday\n /** Yearly: 1..12. */\n month: number\n end: 'never' | 'until' | 'count'\n /** YYYY-MM-DD, inclusive, in the event's zone. */\n until: string | null\n count: number\n /** The raw rule for `custom` (and the original text of any parsed rule). */\n raw: string\n}\n\n/** The weekday code of a `YYYY-MM-DD` date. */\nexport function weekdayOf(date: string): RRuleWeekday {\n return RRULE_WEEKDAYS[Temporal.PlainDate.from(date).dayOfWeek - 1]\n}\n\n/** Which occurrence of its weekday a date is in its month: 1..4, or -1 when it is the last one. */\nexport function setPosOf(date: string, preferLast = false): SetPos {\n const d = Temporal.PlainDate.from(date)\n const isLast = d.day + 7 > d.daysInMonth\n const nth = Math.ceil(d.day / 7)\n if (isLast && (preferLast || nth > 4)) return -1\n return Math.min(nth, 4) as SetPos\n}\n\n/** A sensible form for an event starting on `startDate` (YYYY-MM-DD). */\nexport function defaultRecurrenceForm(\n startDate: string,\n freq: RecurrenceFrequency = 'none'\n): RecurrenceForm {\n const d = Temporal.PlainDate.from(startDate)\n return {\n freq,\n interval: 1,\n weekdays: [weekdayOf(startDate)],\n monthlyMode: 'day',\n monthDay: d.day,\n setPos: setPosOf(startDate),\n setPosDay: weekdayOf(startDate),\n month: d.month,\n end: 'never',\n until: null,\n count: 10,\n raw: '',\n }\n}\n\nexport interface BuildRRuleContext {\n /** All-day events take a DATE UNTIL; timed events a UTC DATE-TIME. */\n allDay?: boolean\n /** Zone the until date is read in (end of that day). */\n timeZone?: string | null\n}\n\nfunction untilValue(until: string, ctx: BuildRRuleContext): string {\n if (ctx.allDay) return until.replace(/-/g, '')\n // Inclusive: the last instant of the until day in the event's zone, in UTC.\n const zone = ctx.timeZone || 'UTC'\n const utc = wallToUtc(`${until}T23:59:59`, zone)\n const t = Temporal.Instant.from(utc).toZonedDateTimeISO('UTC')\n const p = (n: number, w = 2) => String(n).padStart(w, '0')\n return `${p(t.year, 4)}${p(t.month)}${p(t.day)}T${p(t.hour)}${p(t.minute)}${p(t.second)}Z`\n}\n\n/** Build the RRULE value (no `RRULE:` prefix), or null for \"does not repeat\". */\nexport function buildRRule(form: RecurrenceForm, ctx: BuildRRuleContext = {}): string | null {\n if (form.freq === 'none') return null\n if (form.freq === 'custom') {\n const raw = form.raw.trim().replace(/^RRULE:/i, '')\n return raw || null\n }\n const parts: string[] = [`FREQ=${form.freq.toUpperCase()}`]\n const interval = Math.max(1, Math.floor(form.interval || 1))\n if (interval > 1) parts.push(`INTERVAL=${interval}`)\n if (form.freq === 'weekly') {\n const days = RRULE_WEEKDAYS.filter((d) => form.weekdays.includes(d))\n if (days.length) parts.push(`BYDAY=${days.join(',')}`)\n } else if (form.freq === 'monthly' || form.freq === 'yearly') {\n if (form.freq === 'yearly') parts.push(`BYMONTH=${form.month}`)\n if (form.monthlyMode === 'day') {\n parts.push(`BYMONTHDAY=${form.monthDay}`)\n } else {\n parts.push(`BYDAY=${form.setPosDay}`)\n parts.push(`BYSETPOS=${form.setPos}`)\n }\n }\n if (form.end === 'until' && form.until) parts.push(`UNTIL=${untilValue(form.until, ctx)}`)\n else if (form.end === 'count') parts.push(`COUNT=${Math.max(1, Math.floor(form.count || 1))}`)\n return parts.join(';')\n}\n\nfunction tokenize(rrule: string): Map<string, string> {\n const out = new Map<string, string>()\n for (const seg of rrule.replace(/^RRULE:/i, '').split(';')) {\n const i = seg.indexOf('=')\n if (i > 0)\n out.set(\n seg.slice(0, i).trim().toUpperCase(),\n seg\n .slice(i + 1)\n .trim()\n .toUpperCase()\n )\n }\n return out\n}\n\nfunction parseUntil(value: string, ctx: BuildRRuleContext): string | null {\n const m = /^(\\d{4})(\\d{2})(\\d{2})(?:T(\\d{2})(\\d{2})(\\d{2})(Z?))?$/.exec(value)\n if (!m) return null\n const date = `${m[1]}-${m[2]}-${m[3]}`\n if (!m[4] || m[7] !== 'Z') return date\n // A UTC until: the date it falls on in the event's zone.\n const inst = Temporal.Instant.from(`${date}T${m[4]}:${m[5]}:${m[6]}Z`)\n return inst\n .toZonedDateTimeISO(ctx.timeZone || 'UTC')\n .toPlainDate()\n .toString()\n}\n\nconst SUPPORTED = new Set([\n 'FREQ',\n 'INTERVAL',\n 'BYDAY',\n 'BYMONTHDAY',\n 'BYMONTH',\n 'BYSETPOS',\n 'UNTIL',\n 'COUNT',\n 'WKST',\n])\n\n/**\n * Parse an RRULE into the form. `startDate` seeds the fields the rule does not pin. A rule outside\n * the form's vocabulary comes back as `freq: 'custom'` with its text in `raw`.\n */\nexport function parseRRule(\n rrule: string | null | undefined,\n startDate: string,\n ctx: BuildRRuleContext = {}\n): RecurrenceForm {\n const base = defaultRecurrenceForm(startDate)\n if (!rrule || !rrule.trim()) return base\n const raw = rrule.trim().replace(/^RRULE:/i, '')\n const custom: RecurrenceForm = { ...base, freq: 'custom', raw }\n const t = tokenize(raw)\n for (const key of t.keys()) if (!SUPPORTED.has(key)) return custom\n const freq = t.get('FREQ')\n const form: RecurrenceForm = { ...base, raw }\n const interval = Number(t.get('INTERVAL') ?? '1')\n if (!Number.isInteger(interval) || interval < 1) return custom\n form.interval = interval\n if (t.has('UNTIL') && t.has('COUNT')) return custom\n if (t.has('UNTIL')) {\n const until = parseUntil(t.get('UNTIL') ?? '', ctx)\n if (!until) return custom\n form.end = 'until'\n form.until = until\n } else if (t.has('COUNT')) {\n const count = Number(t.get('COUNT'))\n if (!Number.isInteger(count) || count < 1) return custom\n form.end = 'count'\n form.count = count\n }\n const byday = t.get('BYDAY')\n const bymonthday = t.get('BYMONTHDAY')\n const bymonth = t.get('BYMONTH')\n const bysetpos = t.get('BYSETPOS')\n\n /** BYDAY=MO;BYSETPOS=-1 or BYDAY=-1MO → nth weekday. */\n const nthWeekday = (): boolean => {\n if (!byday || bymonthday) return false\n const m = /^([+-]?\\d)?(MO|TU|WE|TH|FR|SA|SU)$/.exec(byday)\n if (!m) return false\n const pos = Number(m[1] ?? bysetpos ?? NaN)\n if (m[1] && bysetpos) return false\n if (![1, 2, 3, 4, -1].includes(pos)) return false\n form.monthlyMode = 'weekday'\n form.setPos = pos as SetPos\n form.setPosDay = m[2] as RRuleWeekday\n return true\n }\n const monthDay = (): boolean => {\n if (!bymonthday || byday || bysetpos) return false\n const n = Number(bymonthday)\n if (!Number.isInteger(n) || n < 1 || n > 31) return false\n form.monthlyMode = 'day'\n form.monthDay = n\n return true\n }\n\n switch (freq) {\n case 'DAILY':\n if (byday || bymonthday || bymonth || bysetpos) return custom\n form.freq = 'daily'\n return form\n case 'WEEKLY': {\n if (bymonthday || bymonth || bysetpos) return custom\n form.freq = 'weekly'\n if (byday) {\n const days = byday.split(',')\n if (!days.every((d) => (RRULE_WEEKDAYS as readonly string[]).includes(d))) return custom\n form.weekdays = days as RRuleWeekday[]\n }\n return form\n }\n case 'MONTHLY':\n if (bymonth) return custom\n form.freq = 'monthly'\n if (!byday && !bymonthday && !bysetpos) return form\n return nthWeekday() || monthDay() ? form : custom\n case 'YEARLY': {\n form.freq = 'yearly'\n if (bymonth) {\n const n = Number(bymonth)\n if (!Number.isInteger(n) || n < 1 || n > 12) return custom\n form.month = n\n }\n if (!byday && !bymonthday && !bysetpos) return form\n if (!bymonth) return custom\n return nthWeekday() || monthDay() ? form : custom\n }\n default:\n return custom\n }\n}\n\nexport interface RecurrenceDescribeLabels {\n every: string\n day: string\n days: string\n week: string\n weeks: string\n month: string\n months: string\n year: string\n years: string\n on: string\n onDay: string\n until: string\n times: string\n ordinals: Record<SetPos, string>\n weekdayNames: Record<RRuleWeekday, string>\n monthNames: string[]\n doesNotRepeat: string\n custom: string\n}\n\nexport const DEFAULT_RECURRENCE_DESCRIBE_LABELS: RecurrenceDescribeLabels = {\n every: 'Every',\n day: 'day',\n days: 'days',\n week: 'week',\n weeks: 'weeks',\n month: 'month',\n months: 'months',\n year: 'year',\n years: 'years',\n on: 'on',\n onDay: 'on day',\n until: 'until',\n times: 'times',\n ordinals: { 1: 'first', 2: 'second', 3: 'third', 4: 'fourth', [-1]: 'last' } as Record<\n SetPos,\n string\n >,\n weekdayNames: {\n MO: 'Monday',\n TU: 'Tuesday',\n WE: 'Wednesday',\n TH: 'Thursday',\n FR: 'Friday',\n SA: 'Saturday',\n SU: 'Sunday',\n },\n monthNames: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n doesNotRepeat: 'Does not repeat',\n custom: 'Custom rule',\n}\n\n/** One-line human summary: \"Every 2 weeks on Monday, Wednesday, 10 times\". */\nexport function describeRecurrence(\n form: RecurrenceForm,\n labels: RecurrenceDescribeLabels = DEFAULT_RECURRENCE_DESCRIBE_LABELS\n): string {\n const l = labels\n if (form.freq === 'none') return l.doesNotRepeat\n if (form.freq === 'custom') return `${l.custom}: ${form.raw}`\n const unit = {\n daily: [l.day, l.days],\n weekly: [l.week, l.weeks],\n monthly: [l.month, l.months],\n yearly: [l.year, l.years],\n }[form.freq]\n let text = form.interval > 1 ? `${l.every} ${form.interval} ${unit[1]}` : `${l.every} ${unit[0]}`\n if (form.freq === 'weekly' && form.weekdays.length) {\n const days = RRULE_WEEKDAYS.filter((d) => form.weekdays.includes(d)).map(\n (d) => l.weekdayNames[d]\n )\n text += ` ${l.on} ${days.join(', ')}`\n }\n if (form.freq === 'monthly' || form.freq === 'yearly') {\n const monthName = form.freq === 'yearly' ? ` ${l.monthNames[form.month - 1]}` : ''\n text +=\n form.monthlyMode === 'day'\n ? form.freq === 'yearly'\n ? ` ${l.on}${monthName} ${form.monthDay}`\n : ` ${l.onDay} ${form.monthDay}`\n : ` ${l.on} ${l.ordinals[form.setPos]} ${l.weekdayNames[form.setPosDay]}${monthName ? ` of${monthName}` : ''}`\n }\n if (form.end === 'until' && form.until) text += `, ${l.until} ${form.until}`\n if (form.end === 'count') text += `, ${form.count} ${l.times}`\n return text\n}\n","import type { RRuleWeekday } from './recurrence'\n\nexport interface RecurrenceEditorLabels {\n doesNotRepeat: string\n daily: string\n weekly: string\n monthly: string\n yearly: string\n custom: string\n every: string\n units: Record<'daily' | 'weekly' | 'monthly' | 'yearly', string>\n onDayOfMonth: string\n onThe: string\n ends: string\n never: string\n onDate: string\n after: string\n occurrences: string\n rrule: string\n rrulePlaceholder: string\n weekdayShort: Record<RRuleWeekday, string>\n}\n\nexport const DEFAULT_RECURRENCE_EDITOR_LABELS: RecurrenceEditorLabels = {\n doesNotRepeat: 'Does not repeat',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n yearly: 'Yearly',\n custom: 'Custom rule…',\n every: 'Every',\n units: { daily: 'day(s)', weekly: 'week(s)', monthly: 'month(s)', yearly: 'year(s)' },\n onDayOfMonth: 'On day',\n onThe: 'On the',\n ends: 'Ends',\n never: 'Never',\n onDate: 'On',\n after: 'After',\n occurrences: 'occurrences',\n rrule: 'iCalendar rule (RRULE)',\n rrulePlaceholder: 'FREQ=WEEKLY;BYDAY=MO,WE',\n weekdayShort: { MO: 'M', TU: 'T', WE: 'W', TH: 'T', FR: 'F', SA: 'S', SU: 'S' },\n}\n","/**\n * Event recurrence editor: does not repeat / daily / weekly (weekdays) / monthly (day of month or\n * nth / last weekday) / yearly / custom RRULE; every N; ends never / on a date / after N times.\n * Emits the RRULE string (null = does not repeat). A superset of the Tasks `RecurrenceBuilder`\n * (that one is time-of-day based; an event's time comes from its start).\n */\nimport { useState } from 'react'\nimport { Input, cn } from '@arbidocs/react/ui'\nimport {\n buildRRule,\n DEFAULT_RECURRENCE_DESCRIBE_LABELS,\n describeRecurrence,\n parseRRule,\n RRULE_WEEKDAYS,\n setPosOf,\n weekdayOf,\n type RecurrenceForm,\n type RecurrenceFrequency,\n type RRuleWeekday,\n type SetPos,\n} from './recurrence'\nimport { NativeSelect } from './ui'\nimport { DEFAULT_RECURRENCE_EDITOR_LABELS, type RecurrenceEditorLabels } from './recurrence-labels'\n\nexport interface RecurrenceEditorProps {\n /** Current RRULE (no `RRULE:` prefix), null/'' = does not repeat. */\n rrule: string | null | undefined\n onChange: (rrule: string | null) => void\n /** Event start date (YYYY-MM-DD) in its zone: seeds weekday / month day. */\n startDate: string\n allDay: boolean\n timeZone: string\n labels?: Partial<RecurrenceEditorLabels>\n idPrefix?: string\n}\n\nconst SETPOS_OPTIONS: SetPos[] = [1, 2, 3, 4, -1]\n\nexport function RecurrenceEditor({\n rrule,\n onChange,\n startDate,\n allDay,\n timeZone,\n labels: labelOverrides,\n idPrefix = 'calendar-recurrence',\n}: RecurrenceEditorProps) {\n const l = { ...DEFAULT_RECURRENCE_EDITOR_LABELS, ...labelOverrides }\n const ctx = { allDay, timeZone }\n // The form is the editing state; the parent only sees RRULE strings. Re-seed when the rule\n // changes from outside (not from our own emit).\n const [form, setForm] = useState<RecurrenceForm>(() => parseRRule(rrule, startDate, ctx))\n const [emitted, setEmitted] = useState<string | null>(rrule || null)\n if ((rrule || null) !== emitted) {\n setEmitted(rrule || null)\n setForm(parseRRule(rrule, startDate, ctx))\n }\n\n const update = (patch: Partial<RecurrenceForm>) => {\n const next = { ...form, ...patch }\n setForm(next)\n const out = buildRRule(next, ctx)\n setEmitted(out)\n onChange(out)\n }\n\n const setFreq = (freq: RecurrenceFrequency) => {\n if (freq === 'custom') {\n update({ freq, raw: buildRRule(form, ctx) ?? form.raw ?? '' })\n return\n }\n const seeded: Partial<RecurrenceForm> = { freq }\n if (form.freq === 'none' || form.freq === 'custom') {\n seeded.weekdays = [weekdayOf(startDate)]\n seeded.monthDay = Number(startDate.slice(8, 10))\n seeded.setPos = setPosOf(startDate)\n seeded.setPosDay = weekdayOf(startDate)\n seeded.month = Number(startDate.slice(5, 7))\n seeded.interval = 1\n }\n update(seeded)\n }\n\n const weekdayName = (d: RRuleWeekday) => DEFAULT_RECURRENCE_DESCRIBE_LABELS.weekdayNames[d]\n const ordinal = (p: SetPos) => DEFAULT_RECURRENCE_DESCRIBE_LABELS.ordinals[p]\n const monthNames = DEFAULT_RECURRENCE_DESCRIBE_LABELS.monthNames\n\n return (\n <div className=\"space-y-2\" data-testid=\"calendar-recurrence\">\n <NativeSelect\n id={`${idPrefix}-freq`}\n aria-label={l.doesNotRepeat}\n value={form.freq}\n onChange={(e) => setFreq(e.target.value as RecurrenceFrequency)}\n data-testid=\"calendar-recurrence-freq\"\n className=\"w-full sm:w-56\"\n >\n <option value=\"none\">{l.doesNotRepeat}</option>\n <option value=\"daily\">{l.daily}</option>\n <option value=\"weekly\">{l.weekly}</option>\n <option value=\"monthly\">{l.monthly}</option>\n <option value=\"yearly\">{l.yearly}</option>\n <option value=\"custom\">{l.custom}</option>\n </NativeSelect>\n\n {form.freq === 'custom' && (\n <div className=\"space-y-1\">\n <label htmlFor={`${idPrefix}-raw`} className=\"text-xs text-muted-foreground\">\n {l.rrule}\n </label>\n <Input\n id={`${idPrefix}-raw`}\n value={form.raw}\n placeholder={l.rrulePlaceholder}\n onChange={(e) => update({ raw: e.target.value })}\n data-testid=\"calendar-recurrence-raw\"\n className=\"font-mono text-xs\"\n />\n </div>\n )}\n\n {form.freq !== 'none' && form.freq !== 'custom' && (\n <div className=\"space-y-2 rounded-md border border-border p-2\">\n <div className=\"flex flex-wrap items-center gap-2 text-sm\">\n <span>{l.every}</span>\n <Input\n type=\"number\"\n min={1}\n max={999}\n aria-label={l.every}\n className=\"h-8 w-16\"\n value={form.interval}\n onChange={(e) => update({ interval: Math.max(1, Number(e.target.value) || 1) })}\n data-testid=\"calendar-recurrence-interval\"\n />\n <span>{l.units[form.freq]}</span>\n </div>\n\n {form.freq === 'weekly' && (\n <div className=\"flex flex-wrap gap-1\" role=\"group\" aria-label={l.weekly}>\n {RRULE_WEEKDAYS.map((d) => {\n const on = form.weekdays.includes(d)\n return (\n <button\n key={d}\n type=\"button\"\n aria-pressed={on}\n aria-label={weekdayName(d)}\n title={weekdayName(d)}\n onClick={() => {\n const next = on ? form.weekdays.filter((x) => x !== d) : [...form.weekdays, d]\n update({ weekdays: next.length ? next : form.weekdays })\n }}\n data-testid={`calendar-recurrence-day-${d}`}\n className={cn(\n 'h-8 w-8 rounded-full border text-xs font-medium transition-colors',\n on\n ? 'border-primary bg-primary text-primary-foreground'\n : 'border-border hover:bg-muted'\n )}\n >\n {l.weekdayShort[d]}\n </button>\n )\n })}\n </div>\n )}\n\n {(form.freq === 'monthly' || form.freq === 'yearly') && (\n <div className=\"space-y-1.5 text-sm\">\n {form.freq === 'yearly' && (\n <NativeSelect\n aria-label={l.yearly}\n value={form.month}\n onChange={(e) => update({ month: Number(e.target.value) })}\n data-testid=\"calendar-recurrence-month\"\n className=\"h-8\"\n >\n {monthNames.map((m, i) => (\n <option key={m} value={i + 1}>\n {m}\n </option>\n ))}\n </NativeSelect>\n )}\n <label className=\"flex flex-wrap items-center gap-2\">\n <input\n type=\"radio\"\n name={`${idPrefix}-monthly`}\n checked={form.monthlyMode === 'day'}\n onChange={() => update({ monthlyMode: 'day' })}\n data-testid=\"calendar-recurrence-mode-day\"\n />\n <span>{l.onDayOfMonth}</span>\n <Input\n type=\"number\"\n min={1}\n max={31}\n aria-label={l.onDayOfMonth}\n className=\"h-8 w-16\"\n value={form.monthDay}\n disabled={form.monthlyMode !== 'day'}\n onChange={(e) =>\n update({ monthDay: Math.min(31, Math.max(1, Number(e.target.value) || 1)) })\n }\n data-testid=\"calendar-recurrence-monthday\"\n />\n </label>\n <label className=\"flex flex-wrap items-center gap-2\">\n <input\n type=\"radio\"\n name={`${idPrefix}-monthly`}\n checked={form.monthlyMode === 'weekday'}\n onChange={() => update({ monthlyMode: 'weekday' })}\n data-testid=\"calendar-recurrence-mode-weekday\"\n />\n <span>{l.onThe}</span>\n <NativeSelect\n aria-label={l.onThe}\n className=\"h-8\"\n value={form.setPos}\n disabled={form.monthlyMode !== 'weekday'}\n onChange={(e) => update({ setPos: Number(e.target.value) as SetPos })}\n data-testid=\"calendar-recurrence-setpos\"\n >\n {SETPOS_OPTIONS.map((p) => (\n <option key={p} value={p}>\n {ordinal(p)}\n </option>\n ))}\n </NativeSelect>\n <NativeSelect\n aria-label={l.weekly}\n className=\"h-8\"\n value={form.setPosDay}\n disabled={form.monthlyMode !== 'weekday'}\n onChange={(e) => update({ setPosDay: e.target.value as RRuleWeekday })}\n data-testid=\"calendar-recurrence-setpos-day\"\n >\n {RRULE_WEEKDAYS.map((d) => (\n <option key={d} value={d}>\n {weekdayName(d)}\n </option>\n ))}\n </NativeSelect>\n </label>\n </div>\n )}\n\n <div className=\"space-y-1.5 text-sm\">\n <div className=\"text-xs font-medium text-muted-foreground\">{l.ends}</div>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"radio\"\n name={`${idPrefix}-end`}\n checked={form.end === 'never'}\n onChange={() => update({ end: 'never' })}\n data-testid=\"calendar-recurrence-end-never\"\n />\n {l.never}\n </label>\n <label className=\"flex flex-wrap items-center gap-2\">\n <input\n type=\"radio\"\n name={`${idPrefix}-end`}\n checked={form.end === 'until'}\n onChange={() => update({ end: 'until', until: form.until ?? startDate })}\n data-testid=\"calendar-recurrence-end-until\"\n />\n {l.onDate}\n <Input\n type=\"date\"\n aria-label={l.onDate}\n className=\"h-8 w-40\"\n value={form.until ?? ''}\n min={startDate}\n disabled={form.end !== 'until'}\n onChange={(e) => update({ until: e.target.value || null })}\n data-testid=\"calendar-recurrence-until\"\n />\n </label>\n <label className=\"flex flex-wrap items-center gap-2\">\n <input\n type=\"radio\"\n name={`${idPrefix}-end`}\n checked={form.end === 'count'}\n onChange={() => update({ end: 'count' })}\n data-testid=\"calendar-recurrence-end-count\"\n />\n {l.after}\n <Input\n type=\"number\"\n min={1}\n max={999}\n aria-label={l.occurrences}\n className=\"h-8 w-20\"\n value={form.count}\n disabled={form.end !== 'count'}\n onChange={(e) => update({ count: Math.max(1, Number(e.target.value) || 1) })}\n data-testid=\"calendar-recurrence-count\"\n />\n {l.occurrences}\n </label>\n </div>\n <p className=\"text-xs text-muted-foreground\" data-testid=\"calendar-recurrence-summary\">\n {describeRecurrence(form)}\n </p>\n </div>\n )}\n </div>\n )\n}\n","/** Display formatting shared by the calendar components. */\nimport {\n addDays,\n formatInZone,\n formatPlainDate,\n safeZone,\n utcToDate,\n zoneCity,\n zoneOffsetLabel,\n} from './zone'\n\n/** `New York (GMT-4)`. */\nexport function formatZoneLabel(zone: string, at: Date | number = Date.now()): string {\n return `${zoneCity(zone)} (${zoneOffsetLabel(zone, at)})`\n}\n\n/** Human time range of an event in `zone`: \"Fri, 16 Oct · 10:00 – 11:00\", all-day \"Fri, 16 Oct – Sun, 18 Oct\". */\nexport function formatEventWhen(\n e: {\n all_day: boolean\n start_utc: string\n end_utc: string\n start: { date?: string | null }\n end: { date?: string | null }\n },\n zone: string,\n locale?: string\n): string {\n const z = safeZone(zone)\n const dayFmt: Intl.DateTimeFormatOptions = {\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n }\n if (e.all_day) {\n const start = e.start.date ?? utcToDate(e.start_utc, z)\n const endExcl = e.end.date ?? utcToDate(e.end_utc, z)\n const last = endExcl > start ? addDays(endExcl, -1) : start\n const a = formatPlainDate(start, dayFmt, locale)\n return last === start ? a : `${a} – ${formatPlainDate(last, dayFmt, locale)}`\n }\n const timeFmt: Intl.DateTimeFormatOptions = { hour: 'numeric', minute: '2-digit' }\n const sameDay = utcToDate(e.start_utc, z) === utcToDate(e.end_utc, z)\n const a = `${formatInZone(e.start_utc, z, dayFmt, locale)} · ${formatInZone(e.start_utc, z, timeFmt, locale)}`\n return sameDay\n ? `${a} – ${formatInZone(e.end_utc, z, timeFmt, locale)}`\n : `${a} – ${formatInZone(e.end_utc, z, dayFmt, locale)} · ${formatInZone(e.end_utc, z, timeFmt, locale)}`\n}\n","/** Searchable IANA time-zone picker (city, region, current GMT offset). */\nimport { useMemo, useState } from 'react'\nimport { Check, ChevronDown, Globe } from 'lucide-react'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n Popover,\n PopoverContent,\n PopoverTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport type { TimeZonePickerProps } from './types'\nimport { mergeLabels } from './labels'\nimport { listTimeZones, zoneCity, zoneOffsetLabel, zoneOffsetMinutes } from './zone'\nimport { formatZoneLabel } from './format'\n\nexport function TimeZonePicker({\n value,\n onChange,\n zones,\n allowNone,\n onClear,\n id,\n ariaLabel,\n disabled,\n labels: labelOverrides,\n className,\n}: TimeZonePickerProps) {\n const labels = mergeLabels(labelOverrides)\n const [open, setOpen] = useState(false)\n const options = useMemo(() => {\n const now = Date.now()\n const list = zones?.length ? zones : listTimeZones()\n return list\n .map((z) => {\n let offset = 0\n try {\n offset = zoneOffsetMinutes(z, now)\n } catch {\n return null\n }\n return { zone: z, offset, label: zoneOffsetLabel(z, now), city: zoneCity(z) }\n })\n .filter((o): o is NonNullable<typeof o> => o !== null)\n .sort((a, b) => a.offset - b.offset || a.zone.localeCompare(b.zone))\n // `open` recomputes offsets each time the list is shown (DST may have changed).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [zones, open])\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n id={id}\n disabled={disabled}\n aria-label={ariaLabel ?? labels.timeZone}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n data-testid=\"calendar-tz-picker\"\n className={cn(\n 'inline-flex h-9 min-w-0 items-center gap-2 rounded-md border border-input bg-background px-2 text-left text-sm shadow-sm',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50',\n className\n )}\n >\n <Globe className=\"h-4 w-4 shrink-0 text-muted-foreground\" aria-hidden />\n <span className=\"min-w-0 flex-1 truncate\">\n {value ? (\n formatZoneLabel(value)\n ) : (\n <span className=\"text-muted-foreground\">{labels.none}</span>\n )}\n </span>\n <ChevronDown className=\"h-4 w-4 shrink-0 text-muted-foreground\" aria-hidden />\n </button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[320px] p-0\" align=\"start\">\n <Command\n filter={(itemValue, search) =>\n itemValue.toLowerCase().includes(search.toLowerCase().trim()) ? 1 : 0\n }\n >\n <CommandInput placeholder={labels.searchTimeZones} data-testid=\"calendar-tz-search\" />\n <CommandList className=\"max-h-72\">\n <CommandEmpty>—</CommandEmpty>\n <CommandGroup>\n {allowNone && (\n <CommandItem\n value={`__none__ ${labels.none}`}\n onSelect={() => {\n onClear?.()\n setOpen(false)\n }}\n >\n <Check className={cn('mr-2 h-4 w-4', value ? 'opacity-0' : 'opacity-100')} />\n {labels.none}\n </CommandItem>\n )}\n {options.map((o) => (\n <CommandItem\n key={o.zone}\n value={`${o.zone} ${o.city} ${o.label}`}\n onSelect={() => {\n onChange(o.zone)\n setOpen(false)\n }}\n data-testid={`calendar-tz-option-${o.zone}`}\n >\n <Check\n className={cn(\n 'mr-2 h-4 w-4 shrink-0',\n value === o.zone ? 'opacity-100' : 'opacity-0'\n )}\n />\n <span className=\"min-w-0 flex-1 truncate\">{o.zone.replace(/_/g, ' ')}</span>\n <span className=\"ml-2 shrink-0 text-xs tabular-nums text-muted-foreground\">\n {o.label}\n </span>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )\n}\n","/** Reminder offsets: minutes ↔ (value, unit) and human text. */\n\nexport type ReminderUnit = 'minutes' | 'hours' | 'days' | 'weeks'\n\nconst UNIT_MINUTES: Record<ReminderUnit, number> = {\n minutes: 1,\n hours: 60,\n days: 24 * 60,\n weeks: 7 * 24 * 60,\n}\n\n/** The largest unit that divides `minutes` exactly: 90 → 90 minutes, 120 → 2 hours, 1440 → 1 day. */\nexport function splitReminderMinutes(minutes: number): { value: number; unit: ReminderUnit } {\n const abs = Math.abs(minutes)\n if (abs === 0) return { value: 0, unit: 'minutes' }\n for (const unit of ['weeks', 'days', 'hours'] as const) {\n if (abs % UNIT_MINUTES[unit] === 0) return { value: minutes / UNIT_MINUTES[unit], unit }\n }\n return { value: minutes, unit: 'minutes' }\n}\n\nexport function reminderToMinutes(value: number, unit: ReminderUnit): number {\n return Math.round(value * UNIT_MINUTES[unit])\n}\n\nexport interface ReminderFormatLabels {\n atStart: string\n before: string\n after: string\n minute: string\n minutes: string\n hour: string\n hours: string\n day: string\n days: string\n week: string\n weeks: string\n}\n\nexport const DEFAULT_REMINDER_FORMAT_LABELS: ReminderFormatLabels = {\n atStart: 'At time of event',\n before: 'before',\n after: 'after',\n minute: 'minute',\n minutes: 'minutes',\n hour: 'hour',\n hours: 'hours',\n day: 'day',\n days: 'days',\n week: 'week',\n weeks: 'weeks',\n}\n\n/** `15 minutes before`, `1 hour before`, `2 days before`, `At time of event`. */\nexport function formatReminder(\n minutesBefore: number,\n labels: ReminderFormatLabels = DEFAULT_REMINDER_FORMAT_LABELS\n): string {\n if (minutesBefore === 0) return labels.atStart\n const { value, unit } = splitReminderMinutes(Math.abs(minutesBefore))\n const singular = {\n minutes: labels.minute,\n hours: labels.hour,\n days: labels.day,\n weeks: labels.week,\n }[unit]\n const word = value === 1 ? singular : labels[unit]\n return `${value} ${word} ${minutesBefore > 0 ? labels.before : labels.after}`\n}\n\n/** Common presets offered in the \"add reminder\" menu. */\nexport const REMINDER_PRESETS = [0, 5, 10, 15, 30, 60, 120, 24 * 60, 2 * 24 * 60, 7 * 24 * 60]\n","/** Event attachments: links, uploaded files saved to a workspace, and existing workspace documents. */\nimport { useState } from 'react'\nimport { Paperclip } from 'lucide-react'\nimport { Button, Input } from '@arbidocs/react/ui'\nimport { DocumentPicker, type PickerGroup } from '../settings/DocumentPicker'\nimport type { AttachmentDraft, CalendarLabels } from './types'\nimport { FieldRow, NativeSelect } from './ui'\n\nexport interface EventAttachmentsProps {\n attachments: AttachmentDraft[]\n documents: (AttachmentDraft & { doc_id: string; title: string })[]\n workspaces: { id: string; name: string }[]\n currentWorkspaceId?: string | null\n onChange: (attachments: AttachmentDraft[]) => void\n onUpload?: (files: File[], workspaceId: string) => Promise<AttachmentDraft[]>\n labels: CalendarLabels\n}\n\nexport function EventAttachments({\n attachments,\n documents,\n workspaces,\n currentWorkspaceId,\n onChange,\n onUpload,\n labels,\n}: EventAttachmentsProps) {\n const [attachUrl, setAttachUrl] = useState('')\n const [attachTitle, setAttachTitle] = useState('')\n const [workspaceId, setWorkspaceId] = useState(currentWorkspaceId ?? '')\n const [uploading, setUploading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const groups: PickerGroup[] = [\n {\n id: 'workspace',\n heading: 'In this workspace',\n docs: documents.map((doc) => ({ id: doc.doc_id, title: doc.title })),\n },\n ]\n\n const addLink = () => {\n const url = attachUrl.trim()\n if (!url) return\n onChange([...attachments, { url, title: attachTitle.trim() || null }])\n setAttachUrl('')\n setAttachTitle('')\n }\n\n const toggleDocument = (id: string) => {\n const document = documents.find((item) => item.doc_id === id)\n if (!document) return\n const exists = attachments.some((item) => item.doc_id === id)\n onChange(exists ? attachments.filter((item) => item.doc_id !== id) : [...attachments, document])\n }\n\n const uploadFiles = async (selected: FileList | null) => {\n if (!selected?.length || !onUpload || !workspaceId) return\n setUploading(true)\n setError(null)\n try {\n onChange([...attachments, ...(await onUpload(Array.from(selected), workspaceId))])\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Could not upload attachments')\n } finally {\n setUploading(false)\n }\n }\n\n return (\n <FieldRow icon={<Paperclip className=\"h-4 w-4\" />} label={labels.attachments}>\n {attachments.length > 0 && (\n <ul className=\"space-y-1\">\n {attachments.map((attachment, index) => (\n <li key={`${attachment.url}-${index}`} className=\"flex items-center gap-2 text-sm\">\n <a\n href={attachment.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"min-w-0 flex-1 truncate text-primary hover:underline\"\n >\n {attachment.title || attachment.url}\n </a>\n <button\n type=\"button\"\n className=\"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={`${labels.remove} ${attachment.title || attachment.url}`}\n onClick={() => onChange(attachments.filter((_, itemIndex) => itemIndex !== index))}\n >\n <span aria-hidden>×</span>\n </button>\n </li>\n ))}\n </ul>\n )}\n <div className=\"flex flex-wrap items-center gap-2\">\n <Input\n type=\"url\"\n aria-label={labels.attachmentUrlPlaceholder}\n placeholder={labels.attachmentUrlPlaceholder}\n className=\"h-8 min-w-0 flex-1\"\n value={attachUrl}\n onChange={(event) => setAttachUrl(event.target.value)}\n />\n <Input\n aria-label={labels.attachmentTitlePlaceholder}\n placeholder={labels.attachmentTitlePlaceholder}\n className=\"h-8 w-40\"\n value={attachTitle}\n onChange={(event) => setAttachTitle(event.target.value)}\n />\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={addLink}\n disabled={!attachUrl.trim()}\n >\n {labels.addAttachment}\n </Button>\n </div>\n {documents.length > 0 && (\n <div className=\"mt-2 space-y-1\">\n <p className=\"text-xs text-muted-foreground\">Choose existing documents</p>\n <DocumentPicker\n groups={groups}\n value=\"\"\n selectedIds={attachments.flatMap((item) => (item.doc_id ? [item.doc_id] : []))}\n onValueChange={toggleDocument}\n labels={{ placeholder: 'Search this workspace…' }}\n />\n </div>\n )}\n {onUpload && workspaces.length > 0 && (\n <div className=\"mt-2 flex flex-wrap items-center gap-2\">\n <span className=\"w-full text-xs text-muted-foreground\">\n Attach files (saved to a workspace)\n </span>\n <NativeSelect\n aria-label=\"Save attachment to workspace\"\n value={workspaceId}\n onChange={(event) => setWorkspaceId(event.target.value)}\n className=\"h-8 max-w-56\"\n >\n {workspaces.map((workspace) => (\n <option key={workspace.id} value={workspace.id}>\n {workspace.id === currentWorkspaceId\n ? `${workspace.name} (current workspace)`\n : workspace.name}\n </option>\n ))}\n </NativeSelect>\n <Input\n type=\"file\"\n multiple\n aria-label=\"Choose files to attach\"\n className=\"h-8 min-w-0 flex-1\"\n disabled={uploading}\n onChange={(event) => {\n void uploadFiles(event.target.files)\n event.currentTarget.value = ''\n }}\n />\n {uploading && <span className=\"text-xs text-muted-foreground\">Saving attachments…</span>}\n </div>\n )}\n {error && (\n <p className=\"text-xs text-destructive\" role=\"alert\">\n {error}\n </p>\n )}\n </FieldRow>\n )\n}\n","/**\n * Full event form (create / edit). Controlled: every edit calls `onChange` with the next\n * `EventDraft` (API shape). Times are wall times in their own zones: start and end may carry\n * different zones (a flight). The host wraps it in a dialog / sheet / page.\n */\nimport { useId, useMemo, useState, type KeyboardEvent, type ReactNode } from 'react'\nimport {\n TextAlignStart,\n Bell,\n Clock,\n Globe,\n Lock,\n MapPin,\n Plus,\n Repeat,\n Tag,\n Trash2,\n Users,\n Video,\n X,\n Palette,\n CalendarDays,\n} from 'lucide-react'\nimport { Button, Input, Switch, Textarea, cn } from '@arbidocs/react/ui'\nimport type {\n AttendeeDraft,\n CalendarLabels,\n EventDraft,\n EventEditorProps,\n ReminderDraft,\n Sensitivity,\n ShowAs,\n WebinarRole,\n} from './types'\nimport { mergeLabels } from './labels'\nimport { normalizeConferenceAddress } from './conference'\nimport {\n ARBI_WEBINAR_LABEL,\n allDayInclusiveEnd,\n attendeeKey,\n isAllDayDraft,\n isWebinarConference,\n setDraftAllDay,\n setDraftEnd,\n setDraftStart,\n specDate,\n specTime,\n validateDraft,\n} from './draft'\nimport { RecurrenceEditor } from './RecurrenceEditor'\nimport { TimeZonePicker } from './TimeZonePicker'\nimport {\n formatReminder,\n reminderToMinutes,\n splitReminderMinutes,\n type ReminderUnit,\n} from './reminders'\nimport { ColorSwatches, FieldRow, NativeSelect } from './ui'\nimport { EventAttachments } from './EventAttachments'\n\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\nfunction Chip({\n children,\n onRemove,\n removeLabel,\n}: {\n children: ReactNode\n onRemove: () => void\n removeLabel: string\n}) {\n return (\n <span className=\"inline-flex max-w-full items-center gap-1 rounded-full border border-border bg-muted/60 py-0.5 pl-2 pr-1 text-xs\">\n {children}\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label={removeLabel}\n className=\"rounded-full p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </span>\n )\n}\n\nfunction showAsLabel(v: ShowAs, l: CalendarLabels): string {\n return {\n free: l.free,\n tentative: l.tentative,\n busy: l.busy,\n oof: l.oof,\n working_elsewhere: l.workingElsewhere,\n }[v]\n}\n\nexport function EventEditor({\n value,\n onChange,\n onSave,\n onCancel,\n onDelete,\n calendars,\n mode,\n canAddCall,\n onAddCall,\n canAddWebinar,\n isWebinarAttendee,\n defaultTimeZone,\n schedulingSlot,\n attachmentDocuments = [],\n attachmentWorkspaces = [],\n currentWorkspaceId,\n onUploadAttachments,\n attendeeSuggestions,\n onAttendeeQueryChange,\n saving,\n error,\n labels: labelOverrides,\n zones,\n className,\n}: EventEditorProps) {\n const l = useMemo(() => mergeLabels(labelOverrides), [labelOverrides])\n const uid = useId()\n const id = (s: string) => `${uid}-${s}`\n const allDay = isAllDayDraft(value)\n const startZone = value.start.time_zone ?? defaultTimeZone\n const endZone = value.end.time_zone ?? startZone\n const [showZones, setShowZones] = useState(\n () => !allDay && (startZone !== defaultTimeZone || endZone !== startZone)\n )\n const [attendeeInput, setAttendeeInput] = useState('')\n const [categoryInput, setCategoryInput] = useState('')\n const [linkInput, setLinkInput] = useState<string | null>(null)\n const [addingCall, setAddingCall] = useState(false)\n const [webinar, setWebinar] = useState(false)\n const [touched, setTouched] = useState(false)\n const [focus, setFocus] = useState(() => !!value.auto_decline && value.show_as !== 'oof')\n const showDecline = value.show_as === 'oof' || focus\n\n const set = (patch: Partial<EventDraft>) => onChange({ ...value, ...patch })\n const problem = validateDraft(value, defaultTimeZone)\n const shownProblem = problem === 'invalidRange' || (touched && problem) ? problem : null\n\n const writable = calendars.filter((c) => c.canWrite && !c.locked)\n const calendarColor = calendars.find((c) => c.id === value.calendar_id)?.color\n\n // ── attendees ──\n const attendees = value.attendees ?? []\n const addAttendees = (raw: string) => {\n const emails = raw\n .split(/[\\s,;]+/)\n .map((s) => s.trim())\n .filter((s) => EMAIL_RE.test(s))\n if (!emails.length) return false\n const have = new Set(attendees.map((a) => (a.email ?? '').toLowerCase()))\n const next: AttendeeDraft[] = [...attendees]\n for (const email of emails) {\n if (have.has(email.toLowerCase())) continue\n have.add(email.toLowerCase())\n next.push({ email, role: 'required', kind: 'individual' })\n }\n set({ attendees: next })\n return true\n }\n const onAttendeeKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' || e.key === ',' || e.key === ';' || e.key === 'Tab') {\n if (attendeeInput.trim() && addAttendees(attendeeInput)) {\n e.preventDefault()\n setAttendeeInput('')\n }\n } else if (e.key === 'Backspace' && !attendeeInput && attendees.length) {\n set({ attendees: attendees.slice(0, -1) })\n }\n }\n\n // ── categories ──\n const categories = value.categories ?? []\n const addCategory = () => {\n const c = categoryInput.trim()\n if (c && !categories.includes(c)) set({ categories: [...categories, c] })\n setCategoryInput('')\n }\n\n // ── reminders ──\n const reminders = value.reminders ?? []\n const setReminder = (i: number, r: ReminderDraft) =>\n set({ reminders: reminders.map((x, j) => (j === i ? r : x)) })\n\n // ── conference ──\n const addArbiCall = async () => {\n if (!onAddCall) return\n setAddingCall(true)\n try {\n const call = await onAddCall()\n if (call)\n set({\n conference: { type: 'arbi', url: call.url, call_id: call.call_id, label: l.arbiCall },\n })\n } finally {\n setAddingCall(false)\n }\n }\n\n // A webinar's call is made on save, once its roles are picked: until then the conference has no link.\n const addArbiWebinar = () =>\n set({\n conference: { type: 'arbi', kind: 'webinar', url: '', label: ARBI_WEBINAR_LABEL, roles: {} },\n })\n const isWebinar = isWebinarConference(value.conference)\n const roles = value.conference?.roles ?? {}\n const setRole = (a: AttendeeDraft, role: WebinarRole) =>\n value.conference &&\n set({ conference: { ...value.conference, roles: { ...roles, [attendeeKey(a)]: role } } })\n\n const startDate = specDate(value.start)\n const submit = () => {\n setTouched(true)\n if (problem || saving) return\n onSave()\n }\n\n return (\n <form\n className={cn('flex h-full min-h-0 flex-col', className)}\n onSubmit={(e) => {\n e.preventDefault()\n submit()\n }}\n data-testid=\"calendar-event-editor\"\n aria-label={mode === 'create' ? l.createTitle : l.editTitle}\n >\n <div className=\"min-h-0 flex-1 space-y-4 overflow-y-auto p-1 scrollbar-themed\">\n {/* Title */}\n <Input\n id={id('title')}\n aria-label={l.title}\n placeholder={l.titlePlaceholder}\n value={value.title}\n autoFocus={mode === 'create'}\n onChange={(e) => set({ title: e.target.value })}\n className=\"h-11 border-0 border-b border-border rounded-none px-1 text-lg font-medium shadow-none focus-visible:ring-0 focus-visible:border-primary\"\n data-testid=\"calendar-editor-title\"\n />\n\n {/* When */}\n <FieldRow icon={<Clock className=\"h-4 w-4\" />}>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Input\n type=\"date\"\n aria-label={l.start}\n className=\"h-9 w-[9.5rem]\"\n value={startDate}\n onChange={(e) =>\n e.target.value &&\n onChange(setDraftStart(value, { date: e.target.value }, defaultTimeZone))\n }\n data-testid=\"calendar-editor-start-date\"\n />\n {!allDay && (\n <Input\n type=\"time\"\n aria-label={l.startTime}\n className=\"h-9 w-[7rem]\"\n step={300}\n value={specTime(value.start)}\n onChange={(e) =>\n e.target.value &&\n onChange(setDraftStart(value, { time: e.target.value }, defaultTimeZone))\n }\n data-testid=\"calendar-editor-start-time\"\n />\n )}\n <span className=\"text-muted-foreground\">–</span>\n {!allDay && (\n <Input\n type=\"time\"\n aria-label={l.endTime}\n className=\"h-9 w-[7rem]\"\n step={300}\n value={specTime(value.end)}\n onChange={(e) =>\n e.target.value && onChange(setDraftEnd(value, { time: e.target.value }))\n }\n data-testid=\"calendar-editor-end-time\"\n />\n )}\n <Input\n type=\"date\"\n aria-label={l.end}\n className=\"h-9 w-[9.5rem]\"\n value={allDay ? allDayInclusiveEnd(value) : specDate(value.end)}\n min={startDate}\n onChange={(e) =>\n e.target.value && onChange(setDraftEnd(value, { date: e.target.value }))\n }\n data-testid=\"calendar-editor-end-date\"\n />\n </div>\n <div className=\"flex flex-wrap items-center gap-4 pt-1 text-sm\">\n <label className=\"flex items-center gap-2\">\n <Switch\n checked={allDay}\n onCheckedChange={(on) => onChange(setDraftAllDay(value, on, startZone))}\n aria-label={l.allDay}\n data-testid=\"calendar-editor-all-day\"\n />\n {l.allDay}\n </label>\n {!allDay && (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground\"\n onClick={() => setShowZones((v) => !v)}\n aria-expanded={showZones}\n data-testid=\"calendar-editor-zones-toggle\"\n >\n <Globe className=\"h-3.5 w-3.5\" />\n {l.separateTimeZones}\n </button>\n )}\n </div>\n {!allDay && showZones && (\n <div className=\"grid gap-2 pt-1 sm:grid-cols-2\">\n <div className=\"space-y-1\">\n <div className=\"text-xs text-muted-foreground\">{l.startTimeZone}</div>\n <TimeZonePicker\n value={startZone}\n zones={zones}\n ariaLabel={l.startTimeZone}\n labels={labelOverrides}\n className=\"w-full\"\n onChange={(z) => {\n // Keep the wall time, change the zone; the end zone follows unless it was set apart.\n const moved = setDraftStart(value, { timeZone: z }, defaultTimeZone)\n const endFollows = (value.end.time_zone ?? startZone) === startZone\n onChange(endFollows ? { ...moved, end: { ...moved.end, time_zone: z } } : moved)\n }}\n />\n </div>\n <div className=\"space-y-1\">\n <div className=\"text-xs text-muted-foreground\">{l.endTimeZone}</div>\n <TimeZonePicker\n value={endZone}\n zones={zones}\n ariaLabel={l.endTimeZone}\n labels={labelOverrides}\n className=\"w-full\"\n onChange={(z) => onChange(setDraftEnd(value, { timeZone: z }))}\n />\n </div>\n </div>\n )}\n </FieldRow>\n\n {/* Repeat */}\n <FieldRow icon={<Repeat className=\"h-4 w-4\" />}>\n <RecurrenceEditor\n rrule={value.recurrence?.rrule ?? null}\n startDate={startDate}\n allDay={allDay}\n timeZone={startZone}\n idPrefix={id('rrule')}\n onChange={(rrule) =>\n set({\n recurrence: rrule\n ? { ...(value.recurrence ?? {}), rrule }\n : value.recurrence?.rdates?.length\n ? { ...value.recurrence, rrule: null }\n : null,\n })\n }\n />\n </FieldRow>\n\n {/* Calendar */}\n {writable.length > 0 && (\n <FieldRow icon={<CalendarDays className=\"h-4 w-4\" />}>\n <NativeSelect\n aria-label={l.calendar}\n value={value.calendar_id ?? ''}\n onChange={(e) => set({ calendar_id: e.target.value || undefined })}\n data-testid=\"calendar-editor-calendar\"\n className=\"w-full sm:w-72\"\n >\n {!value.calendar_id && <option value=\"\">{l.calendar}</option>}\n {writable.map((c) => (\n <option key={c.id} value={c.id}>\n {c.name ?? c.id}\n </option>\n ))}\n </NativeSelect>\n </FieldRow>\n )}\n\n {/* Audio or video call */}\n <FieldRow icon={<Video className=\"h-4 w-4\" />}>\n {value.conference ? (\n <div\n className=\"flex min-w-0 items-center gap-2 text-sm\"\n data-testid=\"calendar-editor-conference\"\n >\n <span className=\"font-medium\">\n {isWebinar\n ? l.arbiWebinar\n : value.conference.label ||\n (value.conference.type === 'arbi' ? l.arbiCall : l.conference)}\n </span>\n {value.conference.url ? (\n <a\n href={value.conference.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"min-w-0 truncate text-xs text-primary underline-offset-2 hover:underline\"\n >\n {value.conference.url.replace(/#.*$/, '')}\n </a>\n ) : (\n <span className=\"min-w-0 truncate text-xs text-muted-foreground\">\n {l.webinarLinkOnSave}\n </span>\n )}\n <button\n type=\"button\"\n className=\"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={l.removeConference}\n onClick={() => set({ conference: null })}\n data-testid=\"calendar-editor-conference-remove\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n ) : linkInput !== null ? (\n <div className=\"flex items-center gap-2\">\n <Input\n type=\"text\"\n aria-label={l.addMeetingLink}\n placeholder={l.meetingLinkPlaceholder}\n value={linkInput}\n autoFocus\n onChange={(e) => setLinkInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n if (linkInput.trim())\n set({\n conference: {\n type: 'external',\n url: normalizeConferenceAddress(linkInput),\n },\n })\n setLinkInput(null)\n } else if (e.key === 'Escape') setLinkInput(null)\n }}\n data-testid=\"calendar-editor-link-input\"\n />\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={() => {\n if (linkInput.trim())\n set({\n conference: { type: 'external', url: normalizeConferenceAddress(linkInput) },\n })\n setLinkInput(null)\n }}\n >\n <Plus className=\"h-4 w-4\" />\n </Button>\n </div>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {canAddCall && onAddCall && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"secondary\"\n disabled={addingCall}\n onClick={webinar ? addArbiWebinar : addArbiCall}\n data-testid=\"calendar-editor-add-call\"\n >\n <Video className=\"mr-1 h-4 w-4\" />\n {webinar ? l.addArbiWebinar : l.addArbiCall}\n </Button>\n )}\n {canAddCall && onAddCall && canAddWebinar && (\n <label className=\"flex items-center gap-2 text-sm\">\n <Switch\n checked={webinar}\n onCheckedChange={setWebinar}\n aria-label={l.webinar}\n data-testid=\"calendar-editor-webinar\"\n />\n {l.webinar}\n </label>\n )}\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setLinkInput('')}\n data-testid=\"calendar-editor-add-link\"\n >\n {l.addMeetingLink}\n </Button>\n </div>\n )}\n </FieldRow>\n\n {/* A physical location can be used alone or alongside the audio/video call above. */}\n <FieldRow icon={<MapPin className=\"h-4 w-4\" />}>\n <Input\n aria-label={l.location}\n placeholder=\"Physical location (optional)\"\n value={value.location ?? ''}\n onChange={(e) => set({ location: e.target.value || null })}\n data-testid=\"calendar-editor-location\"\n />\n </FieldRow>\n\n {/* Guests */}\n <FieldRow icon={<Users className=\"h-4 w-4\" />}>\n <Input\n type=\"email\"\n multiple\n aria-label={l.addAttendee}\n placeholder={l.addAttendee}\n value={attendeeInput}\n onChange={(e) => {\n setAttendeeInput(e.target.value)\n onAttendeeQueryChange?.(e.target.value)\n }}\n onKeyDown={onAttendeeKey}\n onBlur={() => {\n if (attendeeInput.trim() && addAttendees(attendeeInput)) setAttendeeInput('')\n }}\n data-testid=\"calendar-editor-attendee-input\"\n />\n {attendeeInput.trim() && (attendeeSuggestions?.length ?? 0) > 0 && (\n <ul\n role=\"listbox\"\n aria-label={l.suggestions}\n className=\"mt-1 max-h-48 overflow-y-auto rounded-md border border-border bg-popover shadow-sm\"\n data-testid=\"calendar-editor-attendee-suggestions\"\n >\n {attendeeSuggestions\n ?.filter(\n (s) =>\n !attendees.some((a) => (a.email ?? '').toLowerCase() === s.email.toLowerCase())\n )\n .slice(0, 8)\n .map((s) => (\n <li key={s.email} role=\"option\" aria-selected={false}>\n <button\n type=\"button\"\n className=\"flex w-full items-baseline gap-2 px-3 py-1.5 text-left text-sm hover:bg-muted\"\n // Keep focus in the input: its blur would otherwise try to add the typed text.\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n set({\n attendees: [\n ...attendees,\n {\n email: s.email,\n name: s.name ?? null,\n role: 'required',\n kind: 'individual',\n },\n ],\n })\n setAttendeeInput('')\n onAttendeeQueryChange?.('')\n }}\n data-testid=\"calendar-editor-attendee-suggestion\"\n >\n <span className=\"truncate font-medium\">{s.name || s.email}</span>\n {s.name && (\n <span className=\"truncate text-xs text-muted-foreground\">{s.email}</span>\n )}\n {s.detail && (\n <span className=\"ml-auto shrink-0 text-xs text-muted-foreground\">\n {s.detail}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>\n )}\n {attendees.length > 0 && (\n <ul className=\"space-y-1\" data-testid=\"calendar-editor-attendees\">\n {attendees.map((a, i) => (\n <li\n key={`${a.email ?? a.user_id ?? i}`}\n className=\"flex items-center gap-2 text-sm\"\n >\n <span className=\"min-w-0 flex-1 truncate\" title={a.email ?? undefined}>\n {a.name || a.email || a.user_id}\n </span>\n <NativeSelect\n aria-label={`${a.email ?? ''} ${l.required}`}\n className=\"h-7 text-xs\"\n value={a.role ?? 'required'}\n onChange={(e) =>\n set({\n attendees: attendees.map((x, j) =>\n j === i ? { ...x, role: e.target.value as AttendeeDraft['role'] } : x\n ),\n })\n }\n >\n <option value=\"required\">{l.required}</option>\n <option value=\"optional\">{l.optional}</option>\n </NativeSelect>\n {isWebinar && (isWebinarAttendee?.(a) ?? true) && (\n <NativeSelect\n aria-label={`${a.email ?? ''} ${l.webinarRole}`}\n className=\"h-7 text-xs\"\n value={roles[attendeeKey(a)] ?? 'attendee'}\n onChange={(e) => setRole(a, e.target.value as WebinarRole)}\n data-testid=\"calendar-editor-webinar-role\"\n >\n <option value=\"cohost\">{l.cohost}</option>\n <option value=\"panelist\">{l.panelist}</option>\n <option value=\"attendee\">{l.webinarAttendee}</option>\n </NativeSelect>\n )}\n <button\n type=\"button\"\n className=\"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={`${l.remove} ${a.email ?? ''}`}\n onClick={() => set({ attendees: attendees.filter((_, j) => j !== i) })}\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </li>\n ))}\n </ul>\n )}\n </FieldRow>\n\n {schedulingSlot && <div className=\"pl-8\">{schedulingSlot}</div>}\n\n {/* Description */}\n <FieldRow icon={<TextAlignStart className=\"h-4 w-4\" />}>\n <Textarea\n aria-label={l.description}\n placeholder={l.description}\n value={value.description ?? ''}\n rows={4}\n onChange={(e) => set({ description: e.target.value || null })}\n data-testid=\"calendar-editor-description\"\n />\n </FieldRow>\n\n {/* Reminders */}\n <FieldRow icon={<Bell className=\"h-4 w-4\" />} label={l.reminders}>\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={!!value.use_default_reminders}\n onChange={(e) => set({ use_default_reminders: e.target.checked })}\n data-testid=\"calendar-editor-default-reminders\"\n />\n {l.useDefaultReminders}\n </label>\n {!value.use_default_reminders && (\n <div className=\"space-y-1.5\">\n {reminders.map((r, i) => {\n const { value: n, unit } = splitReminderMinutes(r.minutes_before)\n return (\n <div\n key={i}\n className=\"flex flex-wrap items-center gap-2 text-sm\"\n data-testid=\"calendar-editor-reminder\"\n >\n <NativeSelect\n aria-label={l.reminders}\n className=\"h-8\"\n value={r.action}\n onChange={(e) =>\n setReminder(i, { ...r, action: e.target.value as ReminderDraft['action'] })\n }\n >\n <option value=\"display\">{l.popup}</option>\n <option value=\"email\">{l.email}</option>\n </NativeSelect>\n <Input\n type=\"number\"\n min={0}\n aria-label={formatReminder(r.minutes_before)}\n className=\"h-8 w-20\"\n value={n}\n onChange={(e) =>\n setReminder(i, {\n ...r,\n minutes_before: reminderToMinutes(\n Math.max(0, Number(e.target.value) || 0),\n unit\n ),\n })\n }\n />\n <NativeSelect\n aria-label={l.minutes}\n className=\"h-8\"\n value={unit}\n onChange={(e) =>\n setReminder(i, {\n ...r,\n minutes_before: reminderToMinutes(n, e.target.value as ReminderUnit),\n })\n }\n >\n <option value=\"minutes\">{l.minutes}</option>\n <option value=\"hours\">{l.hours}</option>\n <option value=\"days\">{l.days}</option>\n <option value=\"weeks\">{l.weeks}</option>\n </NativeSelect>\n <span className=\"text-muted-foreground\">{l.beforeStart}</span>\n <button\n type=\"button\"\n className=\"rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={`${l.remove} ${formatReminder(r.minutes_before)}`}\n onClick={() => set({ reminders: reminders.filter((_, j) => j !== i) })}\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )\n })}\n {reminders.length < 5 && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() =>\n set({\n reminders: [\n ...reminders,\n { minutes_before: allDay ? 24 * 60 : 10, action: 'display' },\n ],\n })\n }\n data-testid=\"calendar-editor-add-reminder\"\n >\n <Plus className=\"mr-1 h-4 w-4\" />\n {l.addReminder}\n </Button>\n )}\n </div>\n )}\n </FieldRow>\n\n {/* Show as / visibility / status */}\n <FieldRow icon={<Lock className=\"h-4 w-4\" />}>\n <div className=\"flex flex-wrap gap-2\">\n <NativeSelect\n aria-label={l.showAs}\n value={value.show_as ?? 'busy'}\n onChange={(e) => set({ show_as: e.target.value as ShowAs })}\n data-testid=\"calendar-editor-show-as\"\n >\n {(['busy', 'free', 'tentative', 'oof', 'working_elsewhere'] as ShowAs[]).map((v) => (\n <option key={v} value={v}>\n {showAsLabel(v, l)}\n </option>\n ))}\n </NativeSelect>\n <NativeSelect\n aria-label={l.sensitivity}\n value={value.sensitivity ?? 'normal'}\n onChange={(e) => set({ sensitivity: e.target.value as Sensitivity })}\n data-testid=\"calendar-editor-sensitivity\"\n >\n <option value=\"normal\">{l.normal}</option>\n <option value=\"private\">{l.private}</option>\n <option value=\"confidential\">{l.confidential}</option>\n </NativeSelect>\n <NativeSelect\n aria-label={l.status}\n value={value.status ?? 'confirmed'}\n onChange={(e) => set({ status: e.target.value as EventDraft['status'] })}\n data-testid=\"calendar-editor-status\"\n >\n <option value=\"confirmed\">{l.confirmed}</option>\n <option value=\"tentative\">{l.tentative}</option>\n <option value=\"cancelled\">{l.cancelled}</option>\n </NativeSelect>\n </div>\n <div className=\"flex flex-wrap items-center gap-4 pt-2 text-sm\">\n {value.show_as !== 'oof' && (\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={focus}\n onChange={(e) => {\n setFocus(e.target.checked)\n if (!e.target.checked) set({ auto_decline: false })\n else if (!value.show_as || value.show_as === 'free') set({ show_as: 'busy' })\n }}\n data-testid=\"calendar-editor-focus\"\n />\n {l.focusTime}\n </label>\n )}\n {showDecline && (\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={!!value.auto_decline}\n onChange={(e) => set({ auto_decline: e.target.checked })}\n data-testid=\"calendar-editor-auto-decline\"\n />\n {l.autoDecline}\n </label>\n )}\n </div>\n {showDecline && value.auto_decline && (\n <Input\n className=\"mt-2\"\n aria-label={l.declineMessage}\n placeholder={l.declineMessagePlaceholder}\n value={value.decline_message ?? ''}\n maxLength={1000}\n onChange={(e) => set({ decline_message: e.target.value || null })}\n data-testid=\"calendar-editor-decline-message\"\n />\n )}\n </FieldRow>\n\n {/* Categories */}\n <FieldRow icon={<Tag className=\"h-4 w-4\" />}>\n <div className=\"flex flex-wrap items-center gap-1.5\">\n {categories.map((c) => (\n <Chip\n key={c}\n removeLabel={`${l.remove} ${c}`}\n onRemove={() => set({ categories: categories.filter((x) => x !== c) })}\n >\n {c}\n </Chip>\n ))}\n <Input\n aria-label={l.addCategory}\n placeholder={l.addCategory}\n className=\"h-8 w-40\"\n value={categoryInput}\n onChange={(e) => setCategoryInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault()\n addCategory()\n }\n }}\n onBlur={addCategory}\n data-testid=\"calendar-editor-category-input\"\n />\n </div>\n </FieldRow>\n\n {/* Colour */}\n <FieldRow icon={<Palette className=\"h-4 w-4\" />}>\n <ColorSwatches\n value={value.color ?? null}\n onChange={(c) => set({ color: c })}\n allowNone\n noneLabel={l.defaultColor}\n testIdPrefix=\"calendar-editor-color\"\n />\n {!value.color && calendarColor && <span className=\"sr-only\">{calendarColor}</span>}\n </FieldRow>\n\n {/* Attachments */}\n <EventAttachments\n attachments={value.attachments ?? []}\n documents={attachmentDocuments}\n workspaces={attachmentWorkspaces}\n currentWorkspaceId={currentWorkspaceId}\n onChange={(attachments) => set({ attachments })}\n onUpload={onUploadAttachments}\n labels={l}\n />\n </div>\n\n {(error || shownProblem) && (\n <p\n className=\"px-1 pt-2 text-sm text-destructive\"\n role=\"alert\"\n data-testid=\"calendar-editor-error\"\n >\n {error || (shownProblem === 'invalidRange' ? l.invalidRange : l.titleRequired)}\n </p>\n )}\n <div className=\"flex items-center gap-2 border-t border-border pt-3\">\n {mode === 'edit' && onDelete && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"text-destructive hover:text-destructive\"\n onClick={onDelete}\n data-testid=\"calendar-editor-delete\"\n >\n <Trash2 className=\"mr-1 h-4 w-4\" />\n {l.delete}\n </Button>\n )}\n <div className=\"flex-1\" />\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onCancel}\n data-testid=\"calendar-editor-cancel\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!!saving || problem === 'invalidRange'}\n data-testid=\"calendar-editor-save\"\n >\n {saving ? l.saving : l.save}\n </Button>\n </div>\n </form>\n )\n}\n","/** Read view of one event (popover / side panel): when, where, call, guests, RSVP, edit / delete. */\nimport type { ReactNode } from 'react'\nimport {\n Bell,\n CalendarDays,\n CircleCheck,\n CircleX,\n Clock,\n DoorOpen,\n Lock,\n MapPin,\n Paperclip,\n Pencil,\n Repeat,\n Tag,\n Trash2,\n Users,\n Video,\n X,\n} from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport type { CalendarLabels, EventDetailsProps, PartStat } from './types'\nimport { mergeLabels } from './labels'\nimport { formatReminder } from './reminders'\nimport { formatInZone, safeZone, zoneCity, zoneOffsetLabel } from './zone'\nimport { formatEventWhen } from './format'\nimport { isWebinarConference } from './draft'\n\nconst partstatLabel = (p: PartStat | undefined, l: CalendarLabels): string =>\n ({\n needs_action: l.needsAction,\n accepted: l.accepted,\n declined: l.declined,\n tentative: l.tentative,\n delegated: l.delegated,\n })[p ?? 'needs_action']\n\nfunction Row({ icon, children }: { icon: ReactNode; children: ReactNode }) {\n return (\n <div className=\"flex items-start gap-3 text-sm\">\n <span\n className=\"mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground\"\n aria-hidden\n >\n {icon}\n </span>\n <div className=\"min-w-0 flex-1\">{children}</div>\n </div>\n )\n}\n\nexport function EventDetails({\n event,\n timeZone,\n calendarName,\n calendarColor,\n onEdit,\n onDelete,\n onRespond,\n onProposeTime,\n onJoin,\n onOpenMeetingChat,\n onClose,\n canJoin = true,\n labels: labelOverrides,\n className,\n}: EventDetailsProps) {\n const l = mergeLabels(labelOverrides)\n const zone = safeZone(timeZone)\n const color = event.color || calendarColor || '#3b82f6'\n const restricted = !!event.restricted\n const title = restricted ? l.busy : event.title?.trim() || l.noTitle\n const eventZone = event.start.time_zone\n const otherZone =\n !event.all_day && eventZone && eventZone !== zone ? safeZone(eventZone, zone) : null\n const attendees = event.attendees ?? []\n const counts = attendees.reduce<Record<string, number>>((acc, a) => {\n const k = a.partstat ?? 'needs_action'\n acc[k] = (acc[k] ?? 0) + 1\n return acc\n }, {})\n const canRespond = !!onRespond && !event.is_organizer && event.my_partstat != null && !restricted\n // An invitation in my calendar: its content belongs to the organiser, so no Edit; Delete becomes\n // \"Remove from calendar\" (the server declines on my behalf).\n const invitee = event.is_organizer === false && event.my_partstat != null\n const conference = !restricted ? event.conference : null\n\n return (\n <div className={cn('space-y-3', className)} data-testid=\"calendar-event-details\">\n <div className=\"flex items-start gap-3\">\n <span\n className=\"mt-1.5 h-3 w-3 shrink-0 rounded-sm\"\n style={{ backgroundColor: color }}\n aria-hidden\n />\n <div className=\"min-w-0 flex-1\">\n <h3\n className={cn(\n 'break-words text-lg font-semibold leading-snug',\n event.status === 'cancelled' && 'line-through'\n )}\n data-testid=\"calendar-details-title\"\n >\n {title}\n </h3>\n <div className=\"text-sm text-muted-foreground\" data-testid=\"calendar-details-when\">\n {formatEventWhen(event, zone)}\n </div>\n {otherZone && (\n <div className=\"text-xs text-muted-foreground\">\n {formatInZone(event.start_utc, otherZone, { hour: 'numeric', minute: '2-digit' })} –{' '}\n {formatInZone(event.end_utc, otherZone, { hour: 'numeric', minute: '2-digit' })}{' '}\n {zoneCity(otherZone)} ({zoneOffsetLabel(otherZone, event.start_utc)})\n </div>\n )}\n </div>\n <div className=\"flex shrink-0 items-center\">\n {onEdit && !invitee && event.can_edit !== false && !restricted && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={l.edit}\n onClick={onEdit}\n data-testid=\"calendar-details-edit\"\n >\n <Pencil className=\"h-4 w-4\" />\n </Button>\n )}\n {onDelete && !invitee && event.can_edit !== false && !restricted && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={l.delete}\n onClick={onDelete}\n data-testid=\"calendar-details-delete\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n )}\n {onDelete && invitee && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={l.removeFromCalendar}\n title={l.removeFromCalendar}\n onClick={onDelete}\n data-testid=\"calendar-details-remove\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n )}\n {onClose && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={l.cancel}\n onClick={onClose}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </div>\n\n {event.is_recurring && (\n <Row icon={<Repeat className=\"h-4 w-4\" />}>\n <span className=\"text-muted-foreground\">{l.recurring}</span>\n </Row>\n )}\n\n {conference?.url && (\n <Row icon={<Video className=\"h-4 w-4\" />}>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n disabled={!canJoin}\n onClick={() =>\n onJoin ? onJoin() : window.open(conference.url ?? '', '_blank', 'noopener')\n }\n data-testid=\"calendar-details-join\"\n >\n {isWebinarConference(conference)\n ? l.joinWebinar\n : `${l.join}${conference.type === 'arbi' ? ` ${l.arbiCall}` : ''}`}\n </Button>\n {conference.type === 'arbi' && onOpenMeetingChat && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={onOpenMeetingChat}\n data-testid=\"calendar-details-meeting-chat\"\n >\n {l.openMeetingChat}\n </Button>\n )}\n {conference.type === 'external' && (\n <span className=\"min-w-0 truncate text-xs text-muted-foreground\">\n {conference.url}\n </span>\n )}\n </div>\n </Row>\n )}\n\n {!restricted && event.location && (\n <Row icon={<MapPin className=\"h-4 w-4\" />}>\n <span className=\"break-words\">{event.location}</span>\n </Row>\n )}\n\n {calendarName && (\n <Row icon={<CalendarDays className=\"h-4 w-4\" />}>\n <span>{calendarName}</span>\n </Row>\n )}\n\n {restricted && (\n <Row icon={<Lock className=\"h-4 w-4\" />}>\n <span className=\"text-muted-foreground\">{l.private}</span>\n </Row>\n )}\n\n {!restricted && (event.organizer || attendees.length > 0) && (\n <Row icon={<Users className=\"h-4 w-4\" />}>\n <div className=\"space-y-1\" data-testid=\"calendar-details-attendees\">\n {attendees.length > 0 && (\n <div className=\"text-xs text-muted-foreground\">\n {attendees.length} ·{' '}\n {Object.entries(counts)\n .map(([k, n]) => `${n} ${partstatLabel(k as PartStat, l).toLowerCase()}`)\n .join(', ')}\n </div>\n )}\n {event.organizer && (\n <div className=\"truncate\">\n {event.organizer.name || event.organizer.email}{' '}\n <span className=\"text-xs text-muted-foreground\">· {l.organizer}</span>\n </div>\n )}\n <ul className=\"space-y-0.5\">\n {attendees\n .filter((a) => !a.is_organizer)\n .map((a, i) => (\n <li\n key={`${a.email ?? a.user_id ?? i}`}\n className=\"flex items-center gap-1.5\"\n data-testid=\"calendar-details-attendee\"\n data-partstat={a.partstat ?? 'needs_action'}\n data-kind={a.kind ?? 'individual'}\n >\n {a.partstat === 'accepted' ? (\n <CircleCheck className=\"h-3.5 w-3.5 text-green-600\" aria-label={l.accepted} />\n ) : a.partstat === 'declined' ? (\n <CircleX className=\"h-3.5 w-3.5 text-destructive\" aria-label={l.declined} />\n ) : (\n <Clock\n className=\"h-3.5 w-3.5 text-muted-foreground\"\n aria-label={partstatLabel(a.partstat, l)}\n />\n )}\n {(a.kind === 'room' || a.kind === 'resource') && (\n <DoorOpen className=\"h-3.5 w-3.5 text-muted-foreground\" aria-label={l.room} />\n )}\n <span className=\"min-w-0 truncate\">{a.name || a.email}</span>\n {a.role === 'optional' && (\n <span className=\"text-xs text-muted-foreground\">({l.optional})</span>\n )}\n <span\n className={cn(\n 'ml-auto shrink-0 rounded-full px-1.5 py-0.5 text-[10px]',\n a.partstat === 'accepted'\n ? 'bg-green-500/15 text-green-700 dark:text-green-400'\n : a.partstat === 'declined'\n ? 'bg-destructive/15 text-destructive'\n : 'bg-muted text-muted-foreground'\n )}\n >\n {partstatLabel(a.partstat, l)}\n </span>\n </li>\n ))}\n </ul>\n </div>\n </Row>\n )}\n\n {!restricted && event.description && (\n <div\n className=\"whitespace-pre-wrap break-words rounded-md bg-muted/40 p-2 text-sm\"\n data-testid=\"calendar-details-description\"\n >\n {event.description}\n </div>\n )}\n\n {!restricted && (event.attachments?.length ?? 0) > 0 && (\n <Row icon={<Paperclip className=\"h-4 w-4\" />}>\n <ul className=\"space-y-0.5\">\n {event.attachments?.map((a, i) => (\n <li key={`${a.url}-${i}`}>\n <a\n href={a.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-primary hover:underline\"\n >\n {a.title || a.url}\n </a>\n </li>\n ))}\n </ul>\n </Row>\n )}\n\n {!restricted && (event.categories?.length ?? 0) > 0 && (\n <Row icon={<Tag className=\"h-4 w-4\" />}>\n <div className=\"flex flex-wrap gap-1\">\n {event.categories?.map((c) => (\n <span key={c} className=\"rounded-full bg-muted px-2 py-0.5 text-xs\">\n {c}\n </span>\n ))}\n </div>\n </Row>\n )}\n\n {!restricted && (event.reminders?.length ?? 0) > 0 && (\n <Row icon={<Bell className=\"h-4 w-4\" />}>\n <div className=\"text-muted-foreground\">\n {event.reminders?.map((r) => formatReminder(r.minutes_before)).join(', ')}\n </div>\n </Row>\n )}\n\n {canRespond && (\n <div\n className=\"flex flex-wrap items-center gap-2 border-t border-border pt-3\"\n data-testid=\"calendar-details-rsvp\"\n >\n <span className=\"text-sm text-muted-foreground\">{l.going}</span>\n {(\n [\n ['accepted', l.accept],\n ['declined', l.decline],\n ['tentative', l.maybe],\n ] as const\n ).map(([p, label]) => (\n <Button\n key={p}\n type=\"button\"\n size=\"sm\"\n variant={event.my_partstat === p ? 'default' : 'outline'}\n aria-pressed={event.my_partstat === p}\n onClick={() => onRespond?.(p)}\n data-testid={`calendar-details-rsvp-${p}`}\n >\n {label}\n </Button>\n ))}\n {onProposeTime && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={onProposeTime}\n data-testid=\"calendar-details-propose\"\n >\n {l.proposeNewTime}\n </Button>\n )}\n </div>\n )}\n </div>\n )\n}\n","/** \"This event / this and following / all events\" chooser for edits and deletes of a recurring event. */\nimport { useState } from 'react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@arbidocs/react/ui'\nimport type { EditScope, ScopeDialogProps } from './types'\nimport { mergeLabels } from './labels'\n\nexport function ScopeDialog({\n open,\n action,\n onChoose,\n onCancel,\n allowFollowing = true,\n labels: labelOverrides,\n}: ScopeDialogProps) {\n const l = mergeLabels(labelOverrides)\n const [scope, setScope] = useState<EditScope>('this')\n const options: [EditScope, string][] = [\n ['this', l.scopeThis],\n ...(allowFollowing ? ([['following', l.scopeFollowing]] as [EditScope, string][]) : []),\n ['all', l.scopeAll],\n ]\n const title =\n action === 'edit'\n ? l.scopeEditTitle\n : action === 'respond'\n ? l.scopeRespondTitle\n : l.scopeDeleteTitle\n return (\n <Dialog open={open} onOpenChange={(o) => !o && onCancel()}>\n <DialogContent className=\"max-w-sm\" data-testid=\"calendar-scope-dialog\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription className=\"sr-only\">{title}</DialogDescription>\n </DialogHeader>\n <form\n onSubmit={(e) => {\n e.preventDefault()\n onChoose(scope)\n }}\n >\n <fieldset className=\"space-y-2 py-2\">\n <legend className=\"sr-only\">{title}</legend>\n {options.map(([value, label]) => (\n <label key={value} className=\"flex cursor-pointer items-center gap-2 text-sm\">\n <input\n type=\"radio\"\n name=\"calendar-scope\"\n value={value}\n checked={scope === value}\n onChange={() => setScope(value)}\n data-testid={`calendar-scope-${value}`}\n />\n {label}\n </label>\n ))}\n </fieldset>\n {/* Not DialogFooter: its sticky, negative-margin bar overlapped the last option. */}\n <div className=\"flex justify-end gap-2 pt-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onCancel}\n data-testid=\"calendar-scope-cancel\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n variant={action === 'delete' ? 'destructive' : 'default'}\n data-testid=\"calendar-scope-ok\"\n >\n {action === 'delete' ? l.delete : action === 'respond' ? l.send : l.save}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","/** Layout math for the scheduling assistant: a day window in a zone, and intervals as % positions in it. */\nimport { wallToEpochMs } from './zone'\n\nexport interface DayWindow {\n startMs: number\n endMs: number\n}\n\nconst pad2 = (n: number) => String(n).padStart(2, '0')\n\n/** The shown window of `date` in `zone`, from `startHour` to `endHour` (wall-clock, DST-correct). */\nexport function dayWindow(date: string, zone: string, startHour = 7, endHour = 20): DayWindow {\n const startMs = wallToEpochMs(`${date}T${pad2(startHour)}:00`, zone)\n const endMs =\n endHour >= 24\n ? wallToEpochMs(`${date}T23:59`, zone) + 60_000\n : wallToEpochMs(`${date}T${pad2(endHour)}:00`, zone)\n return { startMs, endMs }\n}\n\nexport interface PlacedInterval {\n leftPct: number\n widthPct: number\n startMs: number\n endMs: number\n}\n\n/** Clip intervals to the window and place them as percentages; intervals outside it are dropped. */\nexport function placeIntervals(\n intervals: { startUtc: string; endUtc: string }[],\n win: DayWindow\n): PlacedInterval[] {\n const span = win.endMs - win.startMs\n if (span <= 0) return []\n const out: PlacedInterval[] = []\n for (const i of intervals) {\n const s = Math.max(Date.parse(i.startUtc), win.startMs)\n const e = Math.min(Date.parse(i.endUtc), win.endMs)\n if (!(e > s)) continue\n out.push({\n startMs: s,\n endMs: e,\n leftPct: ((s - win.startMs) / span) * 100,\n widthPct: ((e - s) / span) * 100,\n })\n }\n return out.sort((a, b) => a.startMs - b.startMs)\n}\n\n/** The parts of the window NOT covered by `working` (shaded as outside working hours). */\nexport function outsideIntervals(\n working: { startUtc: string; endUtc: string }[],\n win: DayWindow\n): PlacedInterval[] {\n const span = win.endMs - win.startMs\n const placed = placeIntervals(working, win)\n const gaps: PlacedInterval[] = []\n let cursor = win.startMs\n for (const w of placed) {\n if (w.startMs > cursor) gaps.push(mk(cursor, w.startMs))\n cursor = Math.max(cursor, w.endMs)\n }\n if (cursor < win.endMs) gaps.push(mk(cursor, win.endMs))\n return gaps\n function mk(s: number, e: number): PlacedInterval {\n return {\n startMs: s,\n endMs: e,\n leftPct: ((s - win.startMs) / span) * 100,\n widthPct: ((e - s) / span) * 100,\n }\n }\n}\n\n/** Hour tick marks (label hour + left %) for the header. */\nexport function hourTicks(\n date: string,\n zone: string,\n startHour: number,\n endHour: number\n): { hour: number; leftPct: number }[] {\n const win = dayWindow(date, zone, startHour, endHour)\n const span = win.endMs - win.startMs\n const ticks: { hour: number; leftPct: number }[] = []\n for (let h = startHour; h < endHour; h++) {\n const ms = wallToEpochMs(`${date}T${pad2(h)}:00`, zone)\n ticks.push({ hour: h, leftPct: ((ms - win.startMs) / span) * 100 })\n }\n return ticks\n}\n","/**\n * Scheduling assistant: one free/busy row per attendee (and room) over a day, working-hours shading,\n * \"availability not shared\" for unknown attendees, the event's slot highlighted, and \"Find a time\"\n * suggestions. Presentational: the host fetches free/busy and suggestions.\n */\nimport { ChevronLeft, ChevronRight, DoorOpen, Sparkles, User } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport type { SchedulingAssistantProps } from './types'\nimport { mergeLabels } from './labels'\nimport { dayWindow, hourTicks, outsideIntervals, placeIntervals } from './scheduling'\nimport { addDays, formatInZone, formatPlainDate, safeZone } from './zone'\n\nexport function SchedulingAssistant({\n date,\n timeZone,\n rows,\n selection,\n dayStartHour = 7,\n dayEndHour = 20,\n loading,\n suggestions,\n finding,\n onFindTime,\n onPickSuggestion,\n onDateChange,\n labels: labelOverrides,\n className,\n}: SchedulingAssistantProps) {\n const l = mergeLabels(labelOverrides)\n const zone = safeZone(timeZone)\n const win = dayWindow(date, zone, dayStartHour, dayEndHour)\n const ticks = hourTicks(date, zone, dayStartHour, dayEndHour)\n const sel = selection ? placeIntervals([selection], win)[0] : undefined\n const time = (iso: string) => formatInZone(iso, zone, { hour: 'numeric', minute: '2-digit' })\n\n return (\n <div className={cn('space-y-2', className)} data-testid=\"calendar-scheduling\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">{l.schedulingAssistant}</span>\n {onDateChange && (\n <div className=\"ml-auto flex items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7\"\n aria-label={l.previous}\n onClick={() => onDateChange(addDays(date, -1))}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <span className=\"text-xs text-muted-foreground\" data-testid=\"calendar-scheduling-date\">\n {formatPlainDate(date, { weekday: 'short', day: 'numeric', month: 'short' })}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7\"\n aria-label={l.next}\n onClick={() => onDateChange(addDays(date, 1))}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n )}\n </div>\n\n <div className={cn('rounded-md border border-border', loading && 'opacity-60')}>\n <div className=\"flex border-b border-border text-[10px] text-muted-foreground\">\n <div className=\"w-32 shrink-0 sm:w-40\" />\n <div className=\"relative h-5 flex-1\">\n {ticks.map((t) => (\n <span\n key={t.hour}\n className=\"absolute top-0.5 -translate-x-1/2\"\n style={{ left: `${t.leftPct}%` }}\n >\n {t.hour}\n </span>\n ))}\n </div>\n </div>\n {rows.map((row) => (\n <div\n key={row.id}\n className=\"flex items-stretch border-b border-border last:border-b-0\"\n data-testid=\"calendar-scheduling-row\"\n data-known={row.known}\n >\n <div className=\"flex w-32 shrink-0 items-center gap-1.5 truncate px-2 py-1 text-xs sm:w-40\">\n {row.kind === 'room' ? (\n <DoorOpen\n className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\"\n aria-label={l.room}\n />\n ) : (\n <User className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" aria-hidden />\n )}\n <span className=\"truncate\" title={row.label}>\n {row.label}\n </span>\n </div>\n <div className=\"relative h-7 flex-1 overflow-hidden\">\n {!row.known ? (\n <div\n className=\"absolute inset-0 flex items-center justify-center bg-[repeating-linear-gradient(45deg,transparent,transparent_4px,hsl(var(--muted))_4px,hsl(var(--muted))_8px)] text-[10px] text-muted-foreground\"\n title={l.unknownAvailability}\n >\n {l.unknownAvailability}\n </div>\n ) : (\n <>\n {row.working &&\n outsideIntervals(row.working, win).map((g, i) => (\n <div\n key={`o${i}`}\n className=\"absolute inset-y-0 bg-muted\"\n style={{ left: `${g.leftPct}%`, width: `${g.widthPct}%` }}\n title={l.outsideWorkingHours}\n data-testid=\"calendar-scheduling-outside\"\n />\n ))}\n {placeIntervals(row.busy, win).map((b, i) => {\n const src = row.busy.find(\n (x) =>\n Math.max(Date.parse(x.startUtc), win.startMs) === b.startMs &&\n Math.min(Date.parse(x.endUtc), win.endMs) === b.endMs\n )\n const tentative = src?.showAs === 'tentative'\n const oof = src?.showAs === 'oof'\n return (\n <div\n key={`b${i}`}\n className={cn(\n 'absolute inset-y-1 rounded-sm',\n oof ? 'bg-purple-500/70' : tentative ? 'bg-primary/35' : 'bg-primary/75'\n )}\n style={{ left: `${b.leftPct}%`, width: `${Math.max(b.widthPct, 0.5)}%` }}\n title={`${src?.title ? `${src.title} · ` : ''}${time(new Date(b.startMs).toISOString())} – ${time(new Date(b.endMs).toISOString())}`}\n data-testid=\"calendar-scheduling-busy\"\n />\n )\n })}\n </>\n )}\n {sel && (\n <div\n className=\"pointer-events-none absolute inset-y-0 border-x-2 border-green-600 bg-green-500/15\"\n style={{ left: `${sel.leftPct}%`, width: `${sel.widthPct}%` }}\n aria-hidden\n />\n )}\n </div>\n </div>\n ))}\n </div>\n\n {onFindTime && (\n <div className=\"space-y-1.5\">\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={onFindTime}\n disabled={finding}\n data-testid=\"calendar-find-time\"\n >\n <Sparkles className=\"mr-1 h-4 w-4\" />\n {finding ? l.findingTimes : l.findATime}\n </Button>\n {suggestions && suggestions.length === 0 && (\n <p className=\"text-xs text-muted-foreground\">{l.noSuggestions}</p>\n )}\n {suggestions && suggestions.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\" data-testid=\"calendar-suggestions\">\n {suggestions.map((s) => (\n <button\n key={s.startUtc}\n type=\"button\"\n onClick={() => onPickSuggestion?.(s)}\n className=\"rounded-md border border-border px-2 py-1 text-left text-xs hover:bg-muted\"\n data-testid=\"calendar-suggestion\"\n >\n <div className=\"font-medium\">\n {formatInZone(s.startUtc, zone, {\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n })}{' '}\n {time(s.startUtc)} – {time(s.endUtc)}\n </div>\n <div className=\"text-muted-foreground\">\n {s.unavailable.length === 0\n ? l.everyoneFree\n : `${s.unavailable.length} ${l.unavailableCount}`}\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n","/** Per-user calendar settings (mirrors the API `CalendarSettings`). Controlled. */\nimport { useId, type ReactNode } from 'react'\nimport { Button, Input, Switch, Textarea, cn } from '@arbidocs/react/ui'\nimport type {\n CalendarLabels,\n CalendarSettingsFormProps,\n CalendarSettingsValue,\n CalendarViewKind,\n CalendarWorkingHours,\n OverlayLayer,\n} from './types'\nimport { mergeLabels } from './labels'\nimport { TimeZonePicker } from './TimeZonePicker'\nimport { NativeSelect } from './ui'\nimport { formatPlainDate } from './zone'\n\n/** Day name for a working-hours day (0 = Monday). 2024-01-01 is a Monday. */\nconst mondayFirstName = (day: number) => formatPlainDate(`2024-01-0${day + 1}`, { weekday: 'long' })\n/** Day name for week_start (0 = Sunday). 2023-12-31 is a Sunday. */\nconst sundayFirstName = (day: number) =>\n formatPlainDate(day === 0 ? '2023-12-31' : `2024-01-0${day}`, { weekday: 'long' })\n\nconst VIEWS: CalendarViewKind[] = ['day', 'work_week', 'week', 'month', 'agenda', 'year']\nconst DURATIONS = [15, 30, 45, 60, 90, 120]\n\nconst viewName = (v: CalendarViewKind, l: CalendarLabels) =>\n ({\n day: l.day,\n week: l.week,\n work_week: l.workWeek,\n month: l.month,\n agenda: l.agenda,\n year: l.year,\n })[v]\n\nfunction Field({\n label,\n htmlFor,\n children,\n}: {\n label: string\n htmlFor?: string\n children: ReactNode\n}) {\n return (\n <div className=\"grid gap-1.5 sm:grid-cols-[12rem_1fr] sm:items-center\">\n <label htmlFor={htmlFor} className=\"text-sm font-medium\">\n {label}\n </label>\n <div className=\"min-w-0\">{children}</div>\n </div>\n )\n}\n\nexport function CalendarSettingsForm({\n value,\n onChange,\n onSave,\n onCancel,\n calendars,\n zones,\n saving,\n error,\n labels: labelOverrides,\n className,\n}: CalendarSettingsFormProps) {\n const l = mergeLabels(labelOverrides)\n const uid = useId()\n const set = (patch: Partial<CalendarSettingsValue>) => onChange({ ...value, ...patch })\n const hoursFor = (day: number): CalendarWorkingHours | undefined =>\n value.working_hours.find((h) => h.day === day)\n const setHours = (day: number, patch: Partial<CalendarWorkingHours> | null) => {\n const rest = value.working_hours.filter((h) => h.day !== day)\n if (patch === null) return set({ working_hours: rest })\n const cur = hoursFor(day) ?? { day, start: '09:00', end: '17:00' }\n set({ working_hours: [...rest, { ...cur, ...patch }].sort((a, b) => a.day - b.day) })\n }\n const overlays = value.overlays ?? []\n const toggleOverlay = (o: OverlayLayer) =>\n set({ overlays: overlays.includes(o) ? overlays.filter((x) => x !== o) : [...overlays, o] })\n const writable = (calendars ?? []).filter((c) => c.canWrite && !c.locked)\n\n return (\n <form\n className={cn('space-y-5', className)}\n onSubmit={(e) => {\n e.preventDefault()\n onSave()\n }}\n data-testid=\"calendar-settings-form\"\n aria-label={l.settingsTitle}\n >\n <Field label={l.timeZone}>\n <TimeZonePicker\n value={value.time_zone}\n zones={zones}\n labels={labelOverrides}\n className=\"w-full sm:w-80\"\n onChange={(z) => set({ time_zone: z })}\n />\n </Field>\n <Field label={l.secondaryTimeZone}>\n <TimeZonePicker\n value={value.secondary_time_zone ?? null}\n zones={zones}\n allowNone\n ariaLabel={l.secondaryTimeZone}\n labels={labelOverrides}\n className=\"w-full sm:w-80\"\n onChange={(z) => set({ secondary_time_zone: z })}\n onClear={() => set({ secondary_time_zone: null })}\n />\n </Field>\n <Field label={l.weekStart} htmlFor={`${uid}-week-start`}>\n <NativeSelect\n id={`${uid}-week-start`}\n value={value.week_start}\n onChange={(e) => set({ week_start: Number(e.target.value) })}\n data-testid=\"calendar-settings-week-start\"\n >\n {[1, 0, 6].map((d) => (\n <option key={d} value={d}>\n {sundayFirstName(d)}\n </option>\n ))}\n </NativeSelect>\n </Field>\n <Field label={l.defaultView} htmlFor={`${uid}-view`}>\n <NativeSelect\n id={`${uid}-view`}\n value={value.default_view}\n onChange={(e) => set({ default_view: e.target.value as CalendarViewKind })}\n data-testid=\"calendar-settings-default-view\"\n >\n {VIEWS.map((v) => (\n <option key={v} value={v}>\n {viewName(v, l)}\n </option>\n ))}\n </NativeSelect>\n </Field>\n <Field label={l.defaultDuration} htmlFor={`${uid}-duration`}>\n <NativeSelect\n id={`${uid}-duration`}\n value={value.default_duration_minutes}\n onChange={(e) => set({ default_duration_minutes: Number(e.target.value) })}\n data-testid=\"calendar-settings-duration\"\n >\n {Array.from(new Set([...DURATIONS, value.default_duration_minutes]))\n .sort((a, b) => a - b)\n .map((m) => (\n <option key={m} value={m}>\n {`${m} ${l.minutes}`}\n </option>\n ))}\n </NativeSelect>\n </Field>\n {writable.length > 0 && (\n <Field label={l.defaultCalendar} htmlFor={`${uid}-calendar`}>\n <NativeSelect\n id={`${uid}-calendar`}\n value={value.default_calendar_id ?? ''}\n onChange={(e) => set({ default_calendar_id: e.target.value || null })}\n data-testid=\"calendar-settings-default-calendar\"\n >\n <option value=\"\">—</option>\n {writable.map((c) => (\n <option key={c.id} value={c.id}>\n {c.name ?? c.id}\n </option>\n ))}\n </NativeSelect>\n </Field>\n )}\n\n <fieldset className=\"space-y-2\">\n <legend className=\"pb-1 text-sm font-medium\">{l.workingHours}</legend>\n {[0, 1, 2, 3, 4, 5, 6].map((day) => {\n const h = hoursFor(day)\n return (\n <div\n key={day}\n className=\"flex flex-wrap items-center gap-2 text-sm\"\n data-testid={`calendar-settings-hours-${day}`}\n >\n <label className=\"flex w-36 items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={!!h}\n onChange={(e) => setHours(day, e.target.checked ? {} : null)}\n />\n {mondayFirstName(day)}\n </label>\n {h && (\n <>\n <Input\n type=\"time\"\n className=\"h-8 w-28\"\n aria-label={`${mondayFirstName(day)} ${l.start}`}\n value={h.start}\n onChange={(e) => e.target.value && setHours(day, { start: e.target.value })}\n />\n <span className=\"text-muted-foreground\">–</span>\n <Input\n type=\"time\"\n className=\"h-8 w-28\"\n aria-label={`${mondayFirstName(day)} ${l.end}`}\n value={h.end === '24:00' ? '23:59' : h.end}\n onChange={(e) => e.target.value && setHours(day, { end: e.target.value })}\n />\n </>\n )}\n </div>\n )\n })}\n </fieldset>\n\n <div className=\"space-y-3\">\n {(\n [\n ['show_week_numbers', l.showWeekNumbers],\n ['show_declined', l.showDeclined],\n ] as const\n ).map(([key, label]) => (\n <label\n key={key}\n className=\"flex items-center justify-between gap-4 text-sm sm:justify-start\"\n >\n <span className=\"sm:w-48\">{label}</span>\n <Switch\n checked={!!value[key]}\n onCheckedChange={(on) => set({ [key]: on } as Partial<CalendarSettingsValue>)}\n aria-label={label}\n data-testid={`calendar-settings-${key}`}\n />\n </label>\n ))}\n </div>\n\n <Field label={l.autoAddInvitations} htmlFor={`${uid}-auto-add`}>\n <NativeSelect\n id={`${uid}-auto-add`}\n value={value.auto_add_invitations ?? 'all'}\n onChange={(e) =>\n set({\n auto_add_invitations: e.target.value as CalendarSettingsValue['auto_add_invitations'],\n })\n }\n data-testid=\"calendar-settings-auto-add\"\n >\n <option value=\"all\">{l.autoAddAll}</option>\n <option value=\"known\">{l.autoAddKnown}</option>\n <option value=\"none\">{l.autoAddNone}</option>\n </NativeSelect>\n </Field>\n\n <fieldset className=\"space-y-1.5\">\n <legend className=\"pb-1 text-sm font-medium\">{l.overlays}</legend>\n {(\n [\n ['facts', l.facts],\n ['workflows', l.workflows],\n ['tasks', l.tasks],\n ] as const\n ).map(([o, label]) => (\n <label key={o} className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={overlays.includes(o)}\n onChange={() => toggleOverlay(o)}\n data-testid={`calendar-settings-overlay-${o}`}\n />\n {label}\n </label>\n ))}\n </fieldset>\n\n <div className=\"space-y-1.5\">\n <label htmlFor={`${uid}-decline`} className=\"text-sm font-medium\">\n {l.declineMessage}\n </label>\n <Textarea\n id={`${uid}-decline`}\n rows={2}\n maxLength={1000}\n value={value.decline_message ?? ''}\n onChange={(e) => set({ decline_message: e.target.value || null })}\n />\n </div>\n\n {error && (\n <p className=\"text-sm text-destructive\" role=\"alert\">\n {error}\n </p>\n )}\n <div className=\"flex justify-end gap-2\">\n {onCancel && (\n <Button type=\"button\" variant=\"outline\" onClick={onCancel}>\n {l.cancel}\n </Button>\n )}\n <Button type=\"submit\" disabled={!!saving} data-testid=\"calendar-settings-save\">\n {saving ? l.saving : l.save}\n </Button>\n </div>\n </form>\n )\n}\n","/** Pure layout helpers for the calendar print view: ranges and zone-correct day bucketing. */\nimport type { components } from '@arbidocs/client'\nimport { addDays, addMonths, dayOfWeekSun0, formatPlainDate, startOfWeek, utcToDate } from './zone'\n\nexport type CalendarEvent = components['schemas']['CalendarEvent']\n\nexport type PrintView = 'agenda' | 'day' | 'week' | 'month'\n\n/** The days [from, to) a view covers. */\nexport function printRange(\n view: PrintView,\n date: string,\n weekStart = 1,\n agendaDays = 30\n): { from: string; to: string } {\n if (view === 'day') return { from: date, to: addDays(date, 1) }\n if (view === 'agenda') return { from: date, to: addDays(date, agendaDays) }\n if (view === 'week') {\n const from = startOfWeek(date, weekStart)\n return { from, to: addDays(from, 7) }\n }\n const first = `${date.slice(0, 8)}01`\n const from = startOfWeek(first, weekStart)\n const nextMonth = addMonths(first, 1)\n const lead = (dayOfWeekSun0(nextMonth) - weekStart + 7) % 7\n const to = lead === 0 ? nextMonth : addDays(nextMonth, 7 - lead)\n return { from, to }\n}\n\nexport function eachDay(from: string, to: string): string[] {\n const out: string[] = []\n for (let d = from; d < to; d = addDays(d, 1)) out.push(d)\n return out\n}\n\n/** Zone days an event touches (all-day: its dates; timed: the zone dates of [start, end)). */\nexport function eventDays(e: CalendarEvent, zone: string): string[] {\n if (e.all_day) {\n const start = e.start.date ?? utcToDate(e.start_utc, 'UTC')\n const endExcl = e.end.date ?? addDays(start, 1)\n return eachDay(start, endExcl > start ? endExcl : addDays(start, 1))\n }\n const startDay = utcToDate(e.start_utc, zone)\n const lastInstant = new Date(\n Math.max(new Date(e.start_utc).getTime(), new Date(e.end_utc).getTime() - 1)\n )\n const endDay = utcToDate(lastInstant, zone)\n return eachDay(startDay, addDays(endDay, 1))\n}\n\nexport function timeLabel(e: CalendarEvent, day: string, zone: string): string {\n if (e.all_day) return 'All day'\n const fmt = new Intl.DateTimeFormat(undefined, {\n timeZone: zone,\n hour: 'numeric',\n minute: '2-digit',\n })\n const sDay = utcToDate(e.start_utc, zone)\n const eDay = utcToDate(new Date(new Date(e.end_utc).getTime() - 1), zone)\n const s = sDay === day ? fmt.format(new Date(e.start_utc)) : '…'\n const en = eDay === day ? fmt.format(new Date(e.end_utc)) : '…'\n return `${s} – ${en}`\n}\n\n/** Events per zone day within [from, to), all-day first then by start. */\nexport function eventsByDay(\n events: CalendarEvent[],\n zone: string,\n from: string,\n to: string\n): Map<string, CalendarEvent[]> {\n const map = new Map<string, CalendarEvent[]>()\n for (const e of events) {\n for (const d of eventDays(e, zone)) {\n if (d < from || d >= to) continue\n const list = map.get(d) ?? []\n list.push(e)\n map.set(d, list)\n }\n }\n for (const list of map.values())\n list.sort(\n (a, b) =>\n Number(b.all_day) - Number(a.all_day) ||\n new Date(a.start_utc).getTime() - new Date(b.start_utc).getTime() ||\n a.title.localeCompare(b.title)\n )\n return map\n}\n\nexport function heading(view: PrintView, date: string, from: string, to: string): string {\n const last = addDays(to, -1)\n if (view === 'day')\n return formatPlainDate(from, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n })\n if (view === 'month')\n return formatPlainDate(`${date.slice(0, 7)}-15`, { year: 'numeric', month: 'long' })\n const opts: Intl.DateTimeFormatOptions = { year: 'numeric', month: 'short', day: 'numeric' }\n return `${formatPlainDate(from, opts)} – ${formatPlainDate(last, opts)}`\n}\n","/**\n * Printable calendar (agenda / day / week / month) rendered from already-fetched events, zone-correct in\n * `timeZone`. `printCalendar(props)` renders it into a body-level host and opens the browser print dialog with\n * only that view visible.\n */\nimport { detectTimeZone, formatPlainDate, safeZone } from './zone'\nimport {\n eachDay,\n eventsByDay,\n heading,\n printRange,\n timeLabel,\n type CalendarEvent,\n type PrintView,\n} from './print-layout'\n\nexport interface PrintCalendarInfo {\n id: string\n name?: string | null\n color?: string | null\n}\n\nexport interface CalendarPrintProps {\n events: CalendarEvent[]\n view: PrintView\n /** Anchor date YYYY-MM-DD (the day, a day in the week / month, or the agenda's first day). */\n date: string\n timeZone: string\n /** 0 = Sunday … 6 = Saturday (calendar settings `week_start`). Default 1 (Monday). */\n weekStart?: number\n /** Agenda length in days. Default 30. */\n agendaDays?: number\n /** Heading; defaults to a description of the range. */\n title?: string\n calendars?: PrintCalendarInfo[]\n}\n\nconst STYLE = `\n.arbi-calendar-print { color: #111; background: #fff; font: 12px/1.4 system-ui, -apple-system, 'Segoe UI', sans-serif; }\n.arbi-calendar-print h1 { font-size: 18px; margin: 0 0 8px; }\n.arbi-calendar-print .acp-zone { color: #555; font-size: 11px; margin-bottom: 12px; }\n.arbi-calendar-print table { border-collapse: collapse; width: 100%; table-layout: fixed; }\n.arbi-calendar-print th, .arbi-calendar-print td { border: 1px solid #bbb; padding: 4px; vertical-align: top; text-align: left; }\n.arbi-calendar-print th { background: #f3f3f3; font-weight: 600; }\n.arbi-calendar-print .acp-day { break-inside: avoid; margin-bottom: 10px; }\n.arbi-calendar-print .acp-day h2 { font-size: 13px; margin: 0 0 4px; border-bottom: 1px solid #bbb; padding-bottom: 2px; }\n.arbi-calendar-print .acp-ev { display: flex; gap: 6px; margin: 2px 0; break-inside: avoid; }\n.arbi-calendar-print .acp-time { flex: 0 0 auto; min-width: 92px; color: #333; font-variant-numeric: tabular-nums; }\n.arbi-calendar-print .acp-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 4px; vertical-align: middle; print-color-adjust: exact; -webkit-print-color-adjust: exact; }\n.arbi-calendar-print .acp-meta { color: #555; font-size: 11px; white-space: pre-line; }\n.arbi-calendar-print .acp-muted { color: #888; }\n.arbi-calendar-print .acp-cancelled { text-decoration: line-through; color: #888; }\n.arbi-calendar-print .acp-month td { height: 90px; }\n.arbi-calendar-print .acp-month .acp-out { color: #aaa; }\n.arbi-calendar-print .acp-cell-ev { font-size: 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n@media print {\n @page { margin: 12mm; }\n body.arbi-printing-calendar > *:not(.arbi-calendar-print-host) { display: none !important; }\n body.arbi-printing-calendar .arbi-calendar-print-host { display: block !important; }\n body.arbi-printing-calendar .arbi-calendar-print { display: block !important; }\n}\n`\nexport function CalendarPrint({\n events,\n view,\n date,\n timeZone,\n weekStart = 1,\n agendaDays = 30,\n title,\n calendars,\n}: CalendarPrintProps) {\n const zone = safeZone(timeZone, detectTimeZone())\n const { from, to } = printRange(view, date, weekStart, agendaDays)\n const byDay = eventsByDay(events, zone, from, to)\n const color = (e: CalendarEvent) =>\n e.color || calendars?.find((c) => c.id === e.calendar_id)?.color || '#3b82f6'\n const label = (e: CalendarEvent) => (e.restricted && !e.title ? 'Busy' : e.title || '(no title)')\n\n const evLine = (e: CalendarEvent, day: string, details: boolean) => (\n <div key={`${e.instance_id}-${day}`} className=\"acp-ev\" data-testid=\"calendar-print-event\">\n <span className=\"acp-time\">{timeLabel(e, day, zone)}</span>\n <span>\n <span className=\"acp-dot\" style={{ background: color(e) }} />\n <span className={e.status === 'cancelled' ? 'acp-cancelled' : undefined}>{label(e)}</span>\n {details && e.location && <div className=\"acp-meta\">{e.location}</div>}\n {details && e.description && <div className=\"acp-meta\">{e.description.slice(0, 500)}</div>}\n </span>\n </div>\n )\n\n let body: React.ReactNode\n if (view === 'agenda' || view === 'day') {\n const days = view === 'day' ? [from] : eachDay(from, to).filter((d) => byDay.has(d))\n body = days.length ? (\n days.map((d) => (\n <section key={d} className=\"acp-day\">\n <h2>{formatPlainDate(d, { weekday: 'long', month: 'long', day: 'numeric' })}</h2>\n {(byDay.get(d) ?? []).map((e) => evLine(e, d, true))}\n {!byDay.get(d)?.length && <div className=\"acp-muted\">No events</div>}\n </section>\n ))\n ) : (\n <p className=\"acp-muted\">No events</p>\n )\n } else if (view === 'week') {\n const days = eachDay(from, to)\n body = (\n <table>\n <thead>\n <tr>\n {days.map((d) => (\n <th key={d}>\n {formatPlainDate(d, { weekday: 'short', day: 'numeric', month: 'short' })}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n <tr>\n {days.map((d) => (\n <td key={d} style={{ height: 480 }}>\n {(byDay.get(d) ?? []).map((e) => evLine(e, d, false))}\n </td>\n ))}\n </tr>\n </tbody>\n </table>\n )\n } else {\n const days = eachDay(from, to)\n const weeks: string[][] = []\n for (let i = 0; i < days.length; i += 7) weeks.push(days.slice(i, i + 7))\n const month = date.slice(0, 7)\n body = (\n <table className=\"acp-month\">\n <thead>\n <tr>\n {weeks[0].map((d) => (\n <th key={d}>{formatPlainDate(d, { weekday: 'short' })}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeks.map((w) => (\n <tr key={w[0]}>\n {w.map((d) => (\n <td key={d} className={d.slice(0, 7) === month ? undefined : 'acp-out'}>\n <div>{Number(d.slice(8))}</div>\n {(byDay.get(d) ?? []).slice(0, 6).map((e) => (\n <div\n key={`${e.instance_id}-${d}`}\n className=\"acp-cell-ev\"\n data-testid=\"calendar-print-event\"\n >\n <span className=\"acp-dot\" style={{ background: color(e) }} />\n {!e.all_day && `${timeLabel(e, d, zone).split(' – ')[0]} `}\n {label(e)}\n </div>\n ))}\n {(byDay.get(d)?.length ?? 0) > 6 && (\n <div className=\"acp-cell-ev acp-muted\">\n +{(byDay.get(d)?.length ?? 0) - 6} more\n </div>\n )}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n )\n }\n\n return (\n <div className=\"arbi-calendar-print\" data-testid=\"calendar-print\">\n <style>{STYLE}</style>\n <h1>{title ?? heading(view, date, from, to)}</h1>\n <div className=\"acp-zone\">Times in {zone.replace(/_/g, ' ')}</div>\n {body}\n </div>\n )\n}\n","import { flushSync } from 'react-dom'\nimport { createRoot } from 'react-dom/client'\nimport { CalendarPrint, type CalendarPrintProps } from './CalendarPrint'\n\n/**\n * Open the browser print dialog showing only the calendar print view, rendered into a temporary\n * body-level host.\n */\nexport function printCalendar(props: CalendarPrintProps): void {\n const host = document.createElement('div')\n host.className = 'arbi-calendar-print-host'\n host.style.display = 'none'\n document.body.appendChild(host)\n const root = createRoot(host)\n flushSync(() => root.render(<CalendarPrint {...props} />))\n document.body.classList.add('arbi-printing-calendar')\n let done = false\n const cleanup = () => {\n if (done) return\n done = true\n window.removeEventListener('afterprint', cleanup)\n document.body.classList.remove('arbi-printing-calendar')\n root.unmount()\n host.remove()\n }\n window.addEventListener('afterprint', cleanup)\n try {\n window.print()\n } finally {\n // Browsers without afterprint still get cleaned up (print() blocks there).\n if (!('onafterprint' in window)) setTimeout(cleanup, 1000)\n }\n}\n","/**\n * Public booking slots (UTC instants) grouped by day in the VISITOR's zone, DST-correct. The\n * visitor's zone defaults to `detectTimeZone()`; an unknown zone falls back to it.\n */\nimport {\n detectTimeZone,\n formatInZone,\n formatPlainDate,\n listTimeZones,\n safeZone,\n utcToDate,\n} from './zone'\n\nexport interface SlotView {\n /** ISO instant to send back as `start` */\n start: string\n /** Wall time in the visitor's zone, e.g. \"9:00 AM\" */\n label: string\n}\n\nexport interface SlotDay {\n /** YYYY-MM-DD in the visitor's zone */\n date: string\n /** e.g. \"Monday, November 2\" */\n label: string\n slots: SlotView[]\n}\n\nexport function formatSlotTime(instant: string, zone: string, locale?: string): string {\n return formatInZone(instant, zone, { hour: 'numeric', minute: '2-digit' }, locale)\n}\n\n/** A YYYY-MM-DD date as a weekday + day label. */\nexport function formatDayLabel(date: string, locale?: string): string {\n return formatPlainDate(date, { weekday: 'long', month: 'long', day: 'numeric' }, locale)\n}\n\nexport function groupSlotsByDay(\n slots: readonly string[],\n zone: string,\n locale?: string\n): SlotDay[] {\n const tz = safeZone(zone, detectTimeZone())\n const byDay = new Map<string, SlotView[]>()\n const sorted = [...slots].sort((a, b) => new Date(a).getTime() - new Date(b).getTime())\n for (const start of sorted) {\n const date = utcToDate(start, tz)\n const list = byDay.get(date) ?? []\n list.push({ start, label: formatSlotTime(start, tz, locale) })\n byDay.set(date, list)\n }\n return [...byDay.entries()].map(([date, list]) => ({\n date,\n label: formatDayLabel(date, locale),\n slots: list,\n }))\n}\n\n/** \"Monday, November 2, 9:00 – 9:30 AM (Europe/Berlin)\"-style range for the confirmation. */\nexport function formatSlotRange(start: string, end: string, zone: string, locale?: string): string {\n const tz = safeZone(zone, detectTimeZone())\n const fmt = new Intl.DateTimeFormat(locale, {\n timeZone: tz,\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n })\n const s = new Date(start)\n const e = new Date(end)\n const range = (fmt as Intl.DateTimeFormat & { formatRange?: (a: Date, b: Date) => string })\n .formatRange\n const text = range\n ? range.call(fmt, s, e)\n : `${fmt.format(s)} – ${formatSlotTime(end, tz, locale)}`\n return `${text} (${tz.replace(/_/g, ' ')})`\n}\n\n/** The zones a visitor can pick from, with `current` always among them. */\nexport function zoneOptions(current: string): string[] {\n const zones = listTimeZones()\n return zones.includes(current) ? zones : [current, ...zones]\n}\n","/** API → calendar-block shapes: events and overlay items to `GridEvent`, calendars to `CalendarListItem`. */\nimport type { CalendarEvent, CalendarRead, OverlayItem } from '@arbidocs/react'\nimport { draftRangeUtc } from './draft'\nimport type { CalendarListItem, EventDraft, GridEvent } from './types'\nimport { addDays, utcToDate } from './zone'\n\nexport const DEFAULT_EVENT_COLOR = '#3b82f6'\n\nexport const OVERLAY_COLORS: Record<OverlayItem['layer'], string> = {\n facts: '#a855f7',\n workflows: '#14b8a6',\n tasks: '#f59e0b',\n}\n\nexport function eventToGrid(event: CalendarEvent, calendar?: CalendarRead | null): GridEvent {\n return {\n instanceId: event.instance_id,\n eventId: event.id,\n calendarId: event.calendar_id,\n title: event.title,\n startUtc: event.start_utc,\n endUtc: event.end_utc,\n allDay: !!event.all_day,\n startDate: event.all_day ? (event.start.date ?? undefined) : undefined,\n endDate: event.all_day ? (event.end.date ?? undefined) : undefined,\n color: event.color || calendar?.color || DEFAULT_EVENT_COLOR,\n editable: !!event.can_edit && !event.restricted,\n layer: 'event',\n status: event.status,\n myPartstat: event.my_partstat ?? null,\n showAs: event.show_as,\n isRecurring: !!event.is_recurring || !!event.recurrence_id,\n hasConference: !!event.conference,\n location: event.location ?? null,\n restricted: !!event.restricted,\n }\n}\n\nexport function overlayToGrid(item: OverlayItem, zone: string): GridEvent {\n const allDay = !!item.all_day\n let startDate: string | undefined\n let endDate: string | undefined\n if (allDay) {\n const z = item.time_zone || zone\n startDate = utcToDate(item.start_utc, z)\n endDate = utcToDate(item.end_utc, z)\n if (endDate <= startDate) endDate = addDays(startDate, 1)\n }\n return {\n instanceId: `${item.layer}:${item.instance_id}`,\n eventId: item.id,\n title: item.title,\n startUtc: item.start_utc,\n endUtc: item.end_utc,\n allDay,\n startDate,\n endDate,\n color: OVERLAY_COLORS[item.layer],\n editable: false,\n layer: item.layer,\n }\n}\n\n/** Calendar events + overlays, with hidden calendars (and declined events unless shown) left out. */\nexport function buildGridEvents(\n events: CalendarEvent[] | undefined,\n calendars: CalendarRead[] | undefined,\n overlays: OverlayItem[] | undefined,\n { zone, showDeclined }: { zone: string; showDeclined: boolean }\n): GridEvent[] {\n const byId = new Map((calendars ?? []).map((c) => [c.id, c]))\n const out: GridEvent[] = []\n for (const e of events ?? []) {\n const cal = byId.get(e.calendar_id)\n if (cal?.hidden) continue\n if (!showDeclined && e.my_partstat === 'declined') continue\n out.push(eventToGrid(e, cal))\n }\n for (const o of overlays ?? []) out.push(overlayToGrid(o, zone))\n return out\n}\n\nexport function calendarGroup(c: CalendarRead): CalendarListItem['group'] {\n if (c.kind === 'resource') return 'rooms'\n if (c.workspace_id) return 'workspace'\n if (c.kind === 'subscription' || c.kind === 'holidays') return 'subscribed'\n return c.role === 'owner' ? 'mine' : 'shared'\n}\n\nexport function calendarToListItem(c: CalendarRead): CalendarListItem {\n return {\n id: c.id,\n name: c.name ?? null,\n color: c.color,\n hidden: !!c.hidden,\n locked: !!c.locked,\n role: c.role,\n isDefault: !!c.is_default,\n group: calendarGroup(c),\n canWrite: !!c.can_write,\n provider: c.provider && c.provider !== 'native' ? c.provider : null,\n }\n}\n\n/** Where an overlay item's `link` (`fact:…`, `workflow:…`, `conversation:…`) points. */\nexport function parseOverlayLink(\n link: string | null | undefined\n): { kind: 'fact' | 'workflow' | 'conversation'; id: string } | null {\n const m = /^(fact|workflow|conversation):([A-Za-z0-9_-]+)$/.exec(link ?? '')\n return m ? { kind: m[1] as 'fact' | 'workflow' | 'conversation', id: m[2] } : null\n}\n\nexport const PENDING_EVENT_COLOR = '#94a3b8'\n\n/** A create waiting in the offline outbox, drawn as a read-only pending event. */\nexport function pendingCreateToGrid(\n requestId: string,\n draft: EventDraft,\n zone: string\n): GridEvent | null {\n if (!draft?.start) return null\n const allDay = !!draft.start.date\n let startUtc: string\n let endUtc: string\n try {\n const { startMs, endMs } = draftRangeUtc(draft, zone)\n if (!Number.isFinite(startMs)) return null\n startUtc = new Date(startMs).toISOString()\n endUtc = new Date(\n Number.isFinite(endMs) && endMs > startMs ? endMs : startMs + 30 * 60_000\n ).toISOString()\n } catch {\n return null\n }\n return {\n instanceId: `pending:${requestId}`,\n eventId: `pending:${requestId}`,\n calendarId: draft.calendar_id,\n title: draft.title,\n startUtc,\n endUtc,\n allDay,\n startDate: allDay ? (draft.start.date ?? undefined) : undefined,\n endDate: allDay ? (draft.end?.date ?? undefined) : undefined,\n color: draft.color || PENDING_EVENT_COLOR,\n editable: false,\n layer: 'event',\n status: 'tentative',\n }\n}\n","/**\n * Event drafts and the write requests built from them.\n *\n * PATCH semantics on the server: only the fields sent change (`exclude_unset`), and for an occurrence of a\n * series the request carries `recurrence_id` + `scope` (`this` = override, `following` = split, `all` =\n * the series; a time change made from one occurrence moves the whole series by the same delta). So an\n * edit sends exactly the fields that differ from what the editor opened with, and a drag sends the\n * occurrence's new start/end in the event's own zone.\n */\nimport type {\n CalendarEvent,\n CalendarSettings,\n DateTimeSpec,\n EditScope,\n EventCreateBody,\n EventPatchBody,\n ScopedTarget,\n} from '@arbidocs/react'\nimport { draftFromSlot } from './draft'\nimport type { EventDraft, EventTimeChange, SlotSelection } from './types'\nimport { addDays, utcToWall } from './zone'\n\n/** A series occurrence needs the \"this / following / all\" choice before it is changed or deleted. */\nexport function needsScope(event: Pick<CalendarEvent, 'recurrence_id'>): boolean {\n return !!event.recurrence_id\n}\n\nexport function scopedTarget(\n event: Pick<CalendarEvent, 'id' | 'recurrence_id'>,\n scope: EditScope\n): ScopedTarget {\n return event.recurrence_id\n ? { id: event.id, scope, recurrence_id: event.recurrence_id }\n : { id: event.id, scope: 'all' }\n}\n\n/** The editor's starting draft for an existing event (series fields from `master` when editing an occurrence). */\nexport function eventToDraft(event: CalendarEvent, master?: CalendarEvent | null): EventDraft {\n const recurrence = event.recurrence ?? master?.recurrence ?? null\n return {\n calendar_id: event.calendar_id,\n title: event.title ?? '',\n description: event.description ?? null,\n location: event.location ?? null,\n start: { ...event.start },\n end: { ...event.end },\n recurrence: recurrence\n ? {\n rrule: recurrence.rrule ?? null,\n rdates: recurrence.rdates ?? [],\n exdates: recurrence.exdates ?? [],\n }\n : null,\n status: event.status,\n show_as: event.show_as,\n sensitivity: event.sensitivity,\n categories: event.categories ?? [],\n color: event.color ?? null,\n reminders: (event.reminders ?? []).map((r) => ({\n minutes_before: r.minutes_before,\n action: r.action,\n relative_to: r.relative_to,\n })),\n use_default_reminders: !!event.use_default_reminders,\n attendees: (event.attendees ?? [])\n .filter((a) => !a.is_organizer)\n .map((a) => ({\n email: a.email ?? null,\n user_id: a.user_id ?? null,\n name: a.name ?? null,\n role: a.role,\n kind: a.kind,\n })),\n conference: event.conference?.url\n ? {\n type: event.conference.type,\n url: event.conference.url,\n call_id: event.conference.call_id ?? null,\n label: event.conference.label ?? null,\n }\n : null,\n attachments: (event.attachments ?? []).map((a) => ({\n url: a.url,\n title: a.title ?? null,\n doc_id: a.doc_id ?? null,\n mime_type: a.mime_type ?? null,\n })),\n url: event.url ?? null,\n conversation_id: event.conversation_id ?? null,\n auto_decline: !!event.auto_decline,\n decline_message: event.decline_message ?? null,\n }\n}\n\n/** A new event draft from a grid slot (or \"now\" rounded up), in the settings zone. */\nexport function newEventDraft(\n settings: Pick<CalendarSettings, 'time_zone' | 'default_duration_minutes'>,\n {\n slot,\n calendarId,\n now = new Date(),\n }: { slot?: SlotSelection | null; calendarId?: string | null; now?: Date } = {}\n): EventDraft {\n const zone = settings.time_zone\n const base: EventDraft = {\n title: '',\n start: {},\n end: {},\n ...(calendarId ? { calendar_id: calendarId } : {}),\n use_default_reminders: true,\n }\n if (slot) return { ...base, ...draftFromSlot(slot, zone, calendarId ?? undefined) }\n const step = 30 * 60_000\n const start = new Date(Math.ceil(now.getTime() / step) * step)\n const end = new Date(start.getTime() + (settings.default_duration_minutes || 30) * 60_000)\n return {\n ...base,\n start: { date_time: utcToWall(start, zone), time_zone: zone },\n end: { date_time: utcToWall(end, zone), time_zone: zone },\n }\n}\n\nconst same = (a: unknown, b: unknown) => JSON.stringify(a ?? null) === JSON.stringify(b ?? null)\n\n/** The conference as the calendar stores it: a webinar's kind and roles live on its call, not the event. */\nfunction conferenceWrite(c: EventDraft['conference']): EventDraft['conference'] {\n if (!c) return c\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { kind, roles, ...stored } = c\n return stored\n}\n\nconst PATCH_FIELDS = [\n 'title',\n 'description',\n 'location',\n 'start',\n 'end',\n 'recurrence',\n 'status',\n 'show_as',\n 'sensitivity',\n 'categories',\n 'color',\n 'reminders',\n 'use_default_reminders',\n 'attendees',\n 'conference',\n 'attachments',\n 'url',\n 'conversation_id',\n 'auto_decline',\n 'decline_message',\n] as const satisfies readonly (keyof EventDraft & keyof EventPatchBody)[]\n\n/** The fields of `draft` that differ from `original` (a cleared field is sent as null). */\nexport function diffDraft(original: EventDraft, draft: EventDraft): EventPatchBody {\n const body: Record<string, unknown> = {}\n const o = { ...original, conference: conferenceWrite(original.conference) }\n const d = { ...draft, conference: conferenceWrite(draft.conference) }\n for (const key of PATCH_FIELDS) {\n if (!same(o[key], d[key])) body[key] = d[key] ?? null\n }\n return body as EventPatchBody\n}\n\nexport interface EditRequest {\n target: ScopedTarget\n /** PATCH body; empty when only the calendar changed. */\n body: EventPatchBody\n /** Calendar to move the event to (POST /move), when the calendar selector changed. */\n moveTo: string | null\n}\n\n/** The scoped PATCH (and optional move) for saving the editor. */\nexport function buildEditRequest(\n event: CalendarEvent,\n original: EventDraft,\n draft: EventDraft,\n scope: EditScope\n): EditRequest {\n const body = diffDraft(original, draft)\n // `this` writes an override: a series rule there is meaningless and dropped by the server anyway.\n if (scope === 'this') delete body.recurrence\n const moveTo =\n draft.calendar_id && draft.calendar_id !== event.calendar_id ? draft.calendar_id : null\n return { target: scopedTarget(event, scope), body, moveTo }\n}\n\n/** POST /events body from a create draft. */\nexport function buildCreateBody(draft: EventDraft): EventCreateBody {\n const body: Record<string, unknown> = { ...draft, title: draft.title.trim() }\n for (const [k, v] of Object.entries(body)) if (v === undefined) delete body[k]\n if (!draft.recurrence?.rrule && !draft.recurrence?.rdates?.length) delete body.recurrence\n if (draft.conference) body.conference = conferenceWrite(draft.conference)\n else delete body.conference\n return body as EventCreateBody\n}\n\nfunction timedSpec(instant: string, original: DateTimeSpec, fallbackZone: string): DateTimeSpec {\n // Keep the event's own zone (floating stays floating, in the viewer's zone).\n const wallZone = original.time_zone || fallbackZone\n return {\n date_time: utcToWall(instant, wallZone),\n time_zone: original.date ? fallbackZone : (original.time_zone ?? null),\n }\n}\n\n/** The scoped PATCH for a drag / resize on the grid. */\nexport function buildTimeChangeRequest(\n event: CalendarEvent,\n change: Pick<EventTimeChange, 'startUtc' | 'endUtc' | 'allDay' | 'startDate' | 'endDate'>,\n scope: EditScope,\n zone: string\n): { target: ScopedTarget; body: EventPatchBody } {\n let start: DateTimeSpec\n let end: DateTimeSpec\n if (change.allDay && change.startDate) {\n start = { date: change.startDate }\n end = { date: change.endDate ?? addDays(change.startDate, 1) }\n } else {\n start = timedSpec(change.startUtc, event.start, zone)\n end = timedSpec(change.endUtc, event.end, zone)\n }\n return { target: scopedTarget(event, scope), body: { start, end } }\n}\n\n/** The scoped DELETE target. */\nexport function buildDeleteTarget(event: CalendarEvent, scope: EditScope): ScopedTarget {\n return scopedTarget(event, scope)\n}\n","/** Free/busy → scheduling-assistant rows (working hours as UTC intervals around a viewer day). */\nimport type { FreeBusyEntry, TimeSuggestion } from '@arbidocs/react'\nimport type { EventDraft, SchedulingRow, TimeSuggestionView } from './types'\nimport { addDays, utcToWall, wallToUtc } from './zone'\n\n/** 0 = Monday … 6 = Sunday, like the API's WorkingHours.day. */\nexport function weekdayMon0(date: string): number {\n return (new Date(`${date}T12:00:00Z`).getUTCDay() + 6) % 7\n}\n\n/**\n * An attendee's working hours (wall times in their zone) as UTC intervals covering the viewer's `date`\n * (the neighbouring days are included because zones shift the day boundary). Empty hours → undefined.\n */\nexport function workingIntervals(\n hours: FreeBusyEntry['working_hours'],\n attendeeZone: string | null | undefined,\n date: string\n): { startUtc: string; endUtc: string }[] | undefined {\n if (!hours?.length) return undefined\n const zone = attendeeZone || 'UTC'\n const out: { startUtc: string; endUtc: string }[] = []\n for (const day of [addDays(date, -1), date, addDays(date, 1)]) {\n const wd = weekdayMon0(day)\n for (const h of hours) {\n if (h.day !== wd) continue\n const end = h.end === '24:00' ? `${addDays(day, 1)}T00:00` : `${day}T${h.end}`\n out.push({ startUtc: wallToUtc(`${day}T${h.start}`, zone), endUtc: wallToUtc(end, zone) })\n }\n }\n return out\n}\n\nexport function freeBusyToRows(\n entries: FreeBusyEntry[],\n date: string,\n labelOf: (attendee: string) => string,\n roomEmails: Set<string>\n): SchedulingRow[] {\n return entries.map((e) => ({\n id: e.attendee,\n label: labelOf(e.attendee),\n known: e.known !== false,\n kind: roomEmails.has(e.attendee.toLowerCase()) ? 'room' : 'person',\n busy: (e.busy ?? []).map((b) => ({\n startUtc: b.start,\n endUtc: b.end,\n showAs: b.show_as,\n title: b.title ?? null,\n })),\n working: workingIntervals(e.working_hours, e.time_zone, date),\n }))\n}\n\nexport function toSuggestionViews(s: TimeSuggestion[]) {\n return s.map((x) => ({\n startUtc: x.start,\n endUtc: x.end,\n available: x.available,\n unavailable: x.unavailable,\n }))\n}\n\n/** Move a draft to a suggestion, keeping each end's own zone. */\nexport function applySuggestion(\n draft: EventDraft,\n s: Pick<TimeSuggestionView, 'startUtc' | 'endUtc'>,\n zone: string\n): EventDraft {\n const sz = draft.start.time_zone ?? zone\n const ez = draft.end.time_zone ?? sz\n return {\n ...draft,\n start: { date: null, date_time: utcToWall(s.startUtc, sz), time_zone: sz },\n end: { date: null, date_time: utcToWall(s.endUtc, ez), time_zone: ez },\n }\n}\n","import type { CalendarSettings } from '@arbidocs/react'\nimport type { CalendarSettingsValue } from './types'\n\n/** API settings → the settings form's value. */\nexport function toSettingsValue(s: CalendarSettings): CalendarSettingsValue {\n return {\n time_zone: s.time_zone,\n secondary_time_zone: s.secondary_time_zone ?? null,\n week_start: s.week_start,\n working_hours: (s.working_hours ?? []).map((w) => ({\n day: w.day,\n start: w.start,\n end: w.end,\n location: w.location ?? null,\n })),\n default_view: s.default_view,\n default_duration_minutes: s.default_duration_minutes,\n default_calendar_id: s.default_calendar_id ?? null,\n show_declined: s.show_declined,\n show_week_numbers: s.show_week_numbers,\n auto_add_invitations: s.auto_add_invitations,\n decline_message: s.decline_message ?? null,\n overlays: s.overlays ?? [],\n }\n}\n","/**\n * Minimal iCalendar reader for the mail invitation card: METHOD and the first VEVENT's UID, summary,\n * times (TZID / UTC / floating / all-day), location, organizer and sequence. Display only — the server\n * stays the authority for applying invitations.\n */\nimport { addDays, isValidTimeZone, wallToUtc } from './zone'\n\nexport interface IcsInvite {\n method: string | null\n uid: string | null\n title: string\n location: string | null\n organizer: { email: string | null; name: string | null } | null\n allDay: boolean\n /** ISO instants (all-day: midnight UTC of the dates). */\n startUtc: string | null\n endUtc: string | null\n /** All-day dates (end exclusive). */\n startDate: string | null\n endDate: string | null\n sequence: number\n status: string | null\n}\n\ninterface Prop {\n name: string\n params: Record<string, string>\n value: string\n}\n\n/** Unfold (RFC 5545 §3.1) and split into properties. */\nexport function icsProps(text: string): Prop[] {\n const lines = text\n .replace(/\\r\\n/g, '\\n')\n .replace(/\\n[ \\t]/g, '')\n .split('\\n')\n const out: Prop[] = []\n for (const line of lines) {\n if (!line.trim()) continue\n // The value starts at the first ':' outside a quoted parameter value.\n let i = 0\n let quoted = false\n for (; i < line.length; i++) {\n const c = line[i]\n if (c === '\"') quoted = !quoted\n else if (c === ':' && !quoted) break\n }\n if (i >= line.length) continue\n const head = line.slice(0, i)\n const value = line.slice(i + 1)\n const [name, ...rawParams] = head.split(';')\n const params: Record<string, string> = {}\n for (const p of rawParams) {\n const eq = p.indexOf('=')\n if (eq > 0) params[p.slice(0, eq).toUpperCase()] = p.slice(eq + 1).replace(/^\"|\"$/g, '')\n }\n out.push({ name: name.toUpperCase(), params, value })\n }\n return out\n}\n\nconst unescape = (v: string) =>\n v.replace(/\\\\n/gi, '\\n').replace(/\\\\,/g, ',').replace(/\\\\;/g, ';').replace(/\\\\\\\\/g, '\\\\')\n\nfunction parseTime(p: Prop | undefined, fallbackZone: string) {\n if (!p) return null\n const v = p.value.trim()\n const dateOnly = p.params.VALUE === 'DATE' || /^\\d{8}$/.test(v)\n const d = `${v.slice(0, 4)}-${v.slice(4, 6)}-${v.slice(6, 8)}`\n if (dateOnly) return { allDay: true, date: d, utc: `${d}T00:00:00Z` }\n const t = `${v.slice(9, 11)}:${v.slice(11, 13)}:${v.slice(13, 15) || '00'}`\n if (v.endsWith('Z')) return { allDay: false, date: d, utc: new Date(`${d}T${t}Z`).toISOString() }\n const tzid = p.params.TZID\n const zone = tzid && isValidTimeZone(tzid) ? tzid : fallbackZone\n return { allDay: false, date: d, utc: new Date(wallToUtc(`${d}T${t}`, zone)).toISOString() }\n}\n\nexport function parseIcsInvite(text: string, fallbackZone = 'UTC'): IcsInvite | null {\n const props = icsProps(text)\n const method =\n props\n .find((p) => p.name === 'METHOD')\n ?.value.trim()\n .toUpperCase() ?? null\n const begin = props.findIndex(\n (p) => p.name === 'BEGIN' && p.value.trim().toUpperCase() === 'VEVENT'\n )\n if (begin < 0) return null\n const end = props.findIndex(\n (p, i) => i > begin && p.name === 'END' && p.value.trim().toUpperCase() === 'VEVENT'\n )\n const ev = props.slice(begin + 1, end < 0 ? undefined : end)\n const get = (n: string) => ev.find((p) => p.name === n)\n const start = parseTime(get('DTSTART'), fallbackZone)\n let finish = parseTime(get('DTEND'), fallbackZone)\n if (!finish && start?.allDay) {\n const next = addDays(start.date, 1)\n finish = { allDay: true, date: next, utc: `${next}T00:00:00Z` }\n }\n const org = get('ORGANIZER')\n return {\n method,\n uid: get('UID')?.value.trim() || null,\n title: unescape(get('SUMMARY')?.value ?? '').trim(),\n location: get('LOCATION') ? unescape(get('LOCATION')!.value).trim() || null : null,\n organizer: org\n ? {\n email: org.value.replace(/^mailto:/i, '').trim() || null,\n name: org.params.CN ? unescape(org.params.CN) : null,\n }\n : null,\n allDay: !!start?.allDay,\n startUtc: start?.utc ?? null,\n endUtc: finish?.utc ?? start?.utc ?? null,\n startDate: start?.allDay ? start.date : null,\n endDate: finish?.allDay ? finish.date : null,\n sequence: Number(get('SEQUENCE')?.value ?? 0) || 0,\n status: get('STATUS')?.value.trim().toUpperCase() ?? null,\n }\n}\n\n/** Is this mail attachment an iCalendar object? */\nexport function isCalendarAttachment(a: { name: string; content_type: string }): boolean {\n return /^text\\/calendar\\b|^application\\/ics\\b/i.test(a.content_type) || /\\.ics$/i.test(a.name)\n}\n","/** A subscribable feed URL: https:// (webcal:// is https), or null when it isn't one. */\nexport function normalizeFeedUrl(raw: string): string | null {\n const v = raw.trim()\n if (!v) return null\n const url = v.replace(/^webcals?:\\/\\//i, 'https://')\n try {\n const u = new URL(url)\n return u.protocol === 'https:' || u.protocol === 'http:' ? u.toString() : null\n } catch {\n return null\n }\n}\n","/**\n * A user-facing sentence for a calendar request that failed. A 422 from a synced Google or\n * Microsoft calendar means the provider cannot store the recurrence (extra dates on Outlook, say).\n */\nexport function describeCalendarError(err: unknown, fallback = 'Something went wrong'): string {\n const message = err instanceof Error ? err.message : typeof err === 'string' ? err : ''\n const status = (err as { status?: unknown } | null)?.status\n if (status === 422 || /represent|can't repeat|cannot express|unrepresentable/i.test(message)) {\n return `This repeat pattern can't be saved to the connected calendar provider${\n message ? ` (${message})` : ''\n }. Simplify the recurrence or keep the event in an ARBI calendar.`\n }\n if (status === 429) return 'Too many requests. Wait a minute and try again.'\n return message || fallback\n}\n\n/** A friendly sentence for a public booking refusal (by its HTTP status). */\nexport function publicBookingMessage(err: unknown): string {\n const status = (err as { status?: unknown } | null)?.status\n if (status === 404) return 'This booking page does not exist or is no longer taking bookings.'\n if (status === 409) return 'Sorry — that time was just taken. Please pick another slot.'\n if (status === 429)\n return 'Too many requests from your network. Please wait a minute and try again.'\n if (status === 410) return 'This booking has already been cancelled.'\n if (err instanceof Error && err.message) return err.message\n return 'Something went wrong. Please try again.'\n}\n","/** Booking page form state ↔ API (`BookingPageWrite` / `BookingPageRead`), incl. the weekly-hours editor. Pure. */\nimport type { BookingPage, BookingPageWriteBody, WeeklyHoursSpec } from '@arbidocs/react'\n\n/** Monday-first, matching the API (`day`: 0 = Monday … 6 = Sunday). */\nexport const WEEKDAY_NAMES = [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday',\n]\n\nexport interface TimeInterval {\n start: string\n end: string\n}\n\nexport interface WeeklyDayState {\n enabled: boolean\n intervals: TimeInterval[]\n}\n\n/** Seven entries, index = API day (0 = Monday). */\nexport type WeeklyHoursState = WeeklyDayState[]\n\nexport const DEFAULT_INTERVAL: TimeInterval = { start: '09:00', end: '17:00' }\n\nexport function defaultWeeklyHours(): WeeklyHoursState {\n return Array.from({ length: 7 }, (_, day) => ({\n enabled: day < 5,\n intervals: [{ ...DEFAULT_INTERVAL }],\n }))\n}\n\nconst HHMM = /^([01]\\d|2[0-3]):[0-5]\\d$/\nconst HHMM_END = /^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$/\n\nconst minutes = (t: string) => Number(t.slice(0, 2)) * 60 + Number(t.slice(3, 5))\n\n/** API rows → editor state (days without rows are off with a 9–5 default ready to switch on). */\nexport function weeklyFromApi(\n rows: ReadonlyArray<Record<string, unknown>> | undefined\n): WeeklyHoursState {\n const state: WeeklyHoursState = Array.from({ length: 7 }, () => ({\n enabled: false,\n intervals: [] as TimeInterval[],\n }))\n for (const r of rows ?? []) {\n const day = Number(r.day)\n if (!Number.isInteger(day) || day < 0 || day > 6) continue\n state[day].enabled = true\n state[day].intervals.push({ start: String(r.start ?? ''), end: String(r.end ?? '') })\n }\n for (const d of state) {\n if (!d.intervals.length) d.intervals.push({ ...DEFAULT_INTERVAL })\n d.intervals.sort((a, b) => a.start.localeCompare(b.start))\n }\n return state\n}\n\n/** Problems per day (index → message); empty when valid. */\nexport function validateWeekly(state: WeeklyHoursState): Record<number, string> {\n const errors: Record<number, string> = {}\n let total = 0\n state.forEach((d, day) => {\n if (!d.enabled) return\n const sorted = [...d.intervals].sort((a, b) => a.start.localeCompare(b.start))\n total += sorted.length\n for (const iv of sorted) {\n if (!HHMM.test(iv.start) || !HHMM_END.test(iv.end)) {\n errors[day] = 'Use HH:MM times'\n return\n }\n if (minutes(iv.end) <= minutes(iv.start)) {\n errors[day] = 'End must be after start'\n return\n }\n }\n for (let i = 1; i < sorted.length; i++) {\n if (minutes(sorted[i].start) < minutes(sorted[i - 1].end)) {\n errors[day] = 'Time ranges overlap'\n return\n }\n }\n })\n if (total > 21) errors[-1] = 'At most 21 time ranges per week'\n return errors\n}\n\n/** Editor state → API `weekly` rows, sorted by day then start. Disabled days are left out. */\nexport function weeklyToPayload(state: WeeklyHoursState): WeeklyHoursSpec[] {\n const out: WeeklyHoursSpec[] = []\n state.forEach((d, day) => {\n if (!d.enabled) return\n for (const iv of [...d.intervals].sort((a, b) => a.start.localeCompare(b.start)))\n out.push({ day, start: iv.start, end: iv.end })\n })\n return out\n}\n\nexport interface BookingFormState {\n slug: string\n title: string\n description: string\n /** Comma-separated minutes, e.g. \"30, 60\" */\n durations: string\n timeZone: string\n weekly: WeeklyHoursState\n bufferMinutes: string\n minNoticeHours: string\n maxDaysAhead: string\n dailyLimit: string\n location: string\n active: boolean\n}\n\nexport function emptyBookingForm(timeZone: string): BookingFormState {\n return {\n slug: '',\n title: '',\n description: '',\n durations: '30',\n timeZone,\n weekly: defaultWeeklyHours(),\n bufferMinutes: '0',\n minNoticeHours: '4',\n maxDaysAhead: '60',\n dailyLimit: '',\n location: '',\n active: true,\n }\n}\n\nexport function bookingToForm(p: BookingPage): BookingFormState {\n return {\n slug: p.slug,\n title: p.title,\n description: p.description ?? '',\n durations: p.durations.join(', '),\n timeZone: p.time_zone,\n weekly: weeklyFromApi(p.weekly),\n bufferMinutes: String(p.buffer_minutes ?? 0),\n minNoticeHours: String(Math.round(((p.min_notice_minutes ?? 0) / 60) * 100) / 100),\n maxDaysAhead: String(p.max_days_ahead ?? 60),\n dailyLimit: p.daily_limit ? String(p.daily_limit) : '',\n location: p.location ?? '',\n active: p.active ?? true,\n }\n}\n\nexport function parseDurations(text: string): number[] | null {\n const parts = text\n .split(/[\\s,]+/)\n .map((s) => s.trim())\n .filter(Boolean)\n if (!parts.length) return null\n const values = parts.map(Number)\n if (values.some((v) => !Number.isInteger(v) || v < 5 || v > 480)) return null\n return [...new Set(values)].sort((a, b) => a - b)\n}\n\n/** Lower-case, dashes; what the server accepts in `/book/<slug>`. */\nexport function slugify(text: string): string {\n return text\n .toLowerCase()\n .normalize('NFKD')\n .replace(/[̀-ͯ]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 63)\n}\n\nconst SLUG = /^[a-z0-9][a-z0-9-]{2,62}$/\n\nexport function validateBookingForm(f: BookingFormState): Record<string, string> {\n const errors: Record<string, string> = {}\n if (!SLUG.test(f.slug)) errors.slug = '3–63 lower-case letters, digits or dashes'\n if (!f.title.trim()) errors.title = 'Enter a title'\n const durations = parseDurations(f.durations)\n if (!durations) errors.durations = 'Minutes between 5 and 480, e.g. 15, 30, 60'\n else if (durations.length > 6) errors.durations = 'At most 6 durations'\n const int = (v: string, lo: number, hi: number) => {\n const n = Number(v)\n return v.trim() !== '' && Number.isFinite(n) && n >= lo && n <= hi\n }\n if (!int(f.bufferMinutes, 0, 240)) errors.bufferMinutes = '0–240 minutes'\n if (!int(f.minNoticeHours, 0, 720)) errors.minNoticeHours = '0–720 hours'\n if (!int(f.maxDaysAhead, 1, 365) || !Number.isInteger(Number(f.maxDaysAhead)))\n errors.maxDaysAhead = '1–365 days'\n if (\n f.dailyLimit.trim() &&\n (!int(f.dailyLimit, 1, 100) || !Number.isInteger(Number(f.dailyLimit)))\n )\n errors.dailyLimit = '1–100, or empty for no limit'\n const weekly = validateWeekly(f.weekly)\n if (Object.keys(weekly).length) errors.weekly = Object.values(weekly)[0]\n else if (!weeklyToPayload(f.weekly).length) errors.weekly = 'Turn on at least one day'\n return errors\n}\n\nexport function formToBookingBody(f: BookingFormState): BookingPageWriteBody {\n return {\n slug: f.slug,\n title: f.title.trim(),\n description: f.description.trim() || null,\n durations: parseDurations(f.durations) ?? [30],\n time_zone: f.timeZone,\n weekly: weeklyToPayload(f.weekly),\n buffer_minutes: Math.round(Number(f.bufferMinutes) || 0),\n min_notice_minutes: Math.round((Number(f.minNoticeHours) || 0) * 60),\n max_days_ahead: Math.round(Number(f.maxDaysAhead) || 60),\n daily_limit: f.dailyLimit.trim() ? Math.round(Number(f.dailyLimit)) : null,\n location: f.location.trim() || null,\n active: f.active,\n }\n}\n\n/** The public link: the server's URL, or this origin + /book/<slug>. */\nexport function bookingLink(page: Pick<BookingPage, 'slug' | 'url'>): string {\n return page.url || `${window.location.origin}/book/${page.slug}`\n}\n","/** Weekly availability editor: per weekday on/off and one or more time ranges (Monday first, API day order). */\nimport { Plus, X } from 'lucide-react'\nimport { Button, Input, Switch, cn } from '@arbidocs/react/ui'\nimport {\n DEFAULT_INTERVAL,\n WEEKDAY_NAMES,\n validateWeekly,\n type TimeInterval,\n type WeeklyHoursState,\n} from './booking-form'\n\nexport interface WeeklyHoursEditorProps {\n value: WeeklyHoursState\n onChange: (value: WeeklyHoursState) => void\n className?: string\n}\n\nexport function WeeklyHoursEditor({ value, onChange, className }: WeeklyHoursEditorProps) {\n const errors = validateWeekly(value)\n const setDay = (day: number, patch: Partial<WeeklyHoursState[number]>) =>\n onChange(value.map((d, i) => (i === day ? { ...d, ...patch } : d)))\n const setInterval = (day: number, idx: number, patch: Partial<TimeInterval>) =>\n setDay(day, {\n intervals: value[day].intervals.map((iv, j) => (j === idx ? { ...iv, ...patch } : iv)),\n })\n\n return (\n <div className={cn('grid gap-1.5', className)} data-testid=\"weekly-hours-editor\">\n {value.map((d, day) => (\n <div\n key={day}\n className=\"grid grid-cols-[7.5rem_1fr] items-start gap-2 text-sm sm:grid-cols-[9rem_1fr]\"\n >\n <label className=\"flex h-9 items-center gap-2\">\n <Switch\n checked={d.enabled}\n onCheckedChange={(enabled) =>\n setDay(day, {\n enabled,\n intervals: d.intervals.length ? d.intervals : [{ ...DEFAULT_INTERVAL }],\n })\n }\n aria-label={`${WEEKDAY_NAMES[day]} available`}\n data-testid={`weekly-day-${day}`}\n />\n <span className={d.enabled ? 'text-foreground' : 'text-muted-foreground'}>\n {WEEKDAY_NAMES[day]}\n </span>\n </label>\n {d.enabled ? (\n <div className=\"grid gap-1\">\n {d.intervals.map((iv, idx) => (\n <div key={idx} className=\"flex items-center gap-1\">\n <Input\n type=\"time\"\n className=\"w-28\"\n aria-label={`${WEEKDAY_NAMES[day]} start ${idx + 1}`}\n value={iv.start}\n onChange={(e) => setInterval(day, idx, { start: e.target.value })}\n data-testid={`weekly-${day}-${idx}-start`}\n />\n <span className=\"text-muted-foreground\">–</span>\n <Input\n type=\"time\"\n className=\"w-28\"\n aria-label={`${WEEKDAY_NAMES[day]} end ${idx + 1}`}\n value={iv.end === '24:00' ? '23:59' : iv.end}\n onChange={(e) => setInterval(day, idx, { end: e.target.value })}\n data-testid={`weekly-${day}-${idx}-end`}\n />\n {d.intervals.length > 1 && (\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n aria-label={`Remove ${WEEKDAY_NAMES[day]} range ${idx + 1}`}\n onClick={() =>\n setDay(day, { intervals: d.intervals.filter((_, j) => j !== idx) })\n }\n >\n <X className=\"size-4\" />\n </Button>\n )}\n {idx === d.intervals.length - 1 && (\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n aria-label={`Add ${WEEKDAY_NAMES[day]} range`}\n onClick={() =>\n setDay(day, {\n intervals: [\n ...d.intervals,\n { start: iv.end < '23:00' ? iv.end : '18:00', end: '23:00' },\n ],\n })\n }\n >\n <Plus className=\"size-4\" />\n </Button>\n )}\n </div>\n ))}\n {errors[day] && <span className=\"text-xs text-destructive\">{errors[day]}</span>}\n </div>\n ) : (\n <span className=\"flex h-9 items-center text-muted-foreground\">Unavailable</span>\n )}\n </div>\n ))}\n {errors[-1] && <span className=\"text-xs text-destructive\">{errors[-1]}</span>}\n </div>\n )\n}\n","/** The room-finder window: wall times in an IANA zone (zone math is the calendar block's). */\nimport { utcToWall } from './zone'\n\n/** Default window: the next half hour, for one hour. */\nexport function defaultRoomWindow(\n zone: string,\n now: Date = new Date()\n): { start: string; end: string } {\n const step = 30 * 60_000\n const start = new Date(Math.ceil(now.getTime() / step) * step)\n const end = new Date(start.getTime() + 60 * 60_000)\n return { start: utcToWall(start, zone), end: utcToWall(end, zone) }\n}\n\nexport function formatBusy(start: string, end: string, zone: string): string {\n const fmt = new Intl.DateTimeFormat(undefined, {\n timeZone: zone,\n hour: 'numeric',\n minute: '2-digit',\n })\n return `${fmt.format(new Date(start))}–${fmt.format(new Date(end))}`\n}\n","/** Create a calendar, or rename / recolour one. */\nimport { useEffect, useState } from 'react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\n\nexport interface CalendarFormValue {\n name: string\n color: string\n}\n\nexport interface CalendarFormDialogProps {\n open: boolean\n mode: 'create' | 'edit'\n initial: CalendarFormValue\n saving?: boolean\n onSave: (value: CalendarFormValue) => void\n onCancel: () => void\n}\n\nconst CALENDAR_SWATCHES = [\n '#3b82f6',\n '#10b981',\n '#f59e0b',\n '#ef4444',\n '#8b5cf6',\n '#ec4899',\n '#14b8a6',\n '#64748b',\n]\n\nexport function CalendarFormDialog({\n open,\n mode,\n initial,\n saving,\n onSave,\n onCancel,\n}: CalendarFormDialogProps) {\n const [value, setValue] = useState(initial)\n useEffect(() => {\n if (open) setValue(initial)\n // Reset only when the dialog opens.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n const name = value.name.trim()\n return (\n <Dialog open={open} onOpenChange={(next) => !next && onCancel()}>\n <DialogContent className=\"sm:max-w-md\" data-testid=\"calendar-form-dialog\">\n <DialogHeader>\n <DialogTitle>{mode === 'create' ? 'New calendar' : 'Edit calendar'}</DialogTitle>\n <DialogDescription className=\"sr-only\">Calendar name and colour</DialogDescription>\n </DialogHeader>\n <form\n className=\"flex flex-col gap-4\"\n onSubmit={(e) => {\n e.preventDefault()\n if (name) onSave({ name, color: value.color })\n }}\n >\n <label className=\"flex flex-col gap-1 text-sm\">\n <span className=\"font-medium\">Name</span>\n <Input\n autoFocus\n value={value.name}\n maxLength={200}\n onChange={(e) => setValue({ ...value, name: e.target.value })}\n data-testid=\"calendar-form-name\"\n />\n </label>\n <fieldset className=\"flex flex-col gap-1 text-sm\">\n <legend className=\"mb-1 font-medium\">Colour</legend>\n <div className=\"flex flex-wrap items-center gap-2\">\n {CALENDAR_SWATCHES.map((c) => (\n <button\n key={c}\n type=\"button\"\n aria-label={`Colour ${c}`}\n aria-pressed={value.color.toLowerCase() === c}\n className={`size-7 rounded-full border-2 ${value.color.toLowerCase() === c ? 'border-foreground' : 'border-transparent'}`}\n style={{ backgroundColor: c }}\n onClick={() => setValue({ ...value, color: c })}\n />\n ))}\n <input\n type=\"color\"\n aria-label=\"Custom colour\"\n className=\"size-7 cursor-pointer rounded border-0 bg-transparent p-0\"\n value={value.color}\n onChange={(e) => setValue({ ...value, color: e.target.value })}\n />\n </div>\n </fieldset>\n <DialogFooter>\n <Button type=\"button\" variant=\"ghost\" onClick={onCancel}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={!name || saving} data-testid=\"calendar-form-save\">\n {saving ? 'Saving…' : mode === 'create' ? 'Create' : 'Save'}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","/** \"Propose new time\" for an invitation: a start/end in the user's zone and an optional note. */\nimport { useEffect, useState } from 'react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\nimport { utcToDate, utcToTime } from './zone'\n\nexport interface ProposeTimeValue {\n start: { date_time: string; time_zone: string }\n end: { date_time: string; time_zone: string }\n comment: string | null\n}\n\nexport interface ProposeTimeDialogProps {\n open: boolean\n /** The event's current slot (prefills the form). */\n startUtc: string | null\n endUtc: string | null\n timeZone: string\n sending?: boolean\n onSend: (v: ProposeTimeValue) => void\n onCancel: () => void\n}\n\nexport function ProposeTimeDialog({\n open,\n startUtc,\n endUtc,\n timeZone,\n sending,\n onSend,\n onCancel,\n}: ProposeTimeDialogProps) {\n const [date, setDate] = useState('')\n const [start, setStart] = useState('')\n const [end, setEnd] = useState('')\n const [comment, setComment] = useState('')\n useEffect(() => {\n if (!open || !startUtc || !endUtc) return\n setDate(utcToDate(startUtc, timeZone))\n setStart(utcToTime(startUtc, timeZone))\n setEnd(utcToTime(endUtc, timeZone))\n setComment('')\n }, [open, startUtc, endUtc, timeZone])\n const valid = !!date && !!start && !!end && end > start\n return (\n <Dialog open={open} onOpenChange={(o) => !o && onCancel()}>\n <DialogContent className=\"sm:max-w-md\" data-testid=\"calendar-propose-dialog\">\n <DialogHeader>\n <DialogTitle>Propose a new time</DialogTitle>\n <DialogDescription>The organiser can accept or decline your proposal.</DialogDescription>\n </DialogHeader>\n <form\n className=\"flex flex-col gap-3\"\n onSubmit={(e) => {\n e.preventDefault()\n if (!valid) return\n onSend({\n start: { date_time: `${date}T${start}`, time_zone: timeZone },\n end: { date_time: `${date}T${end}`, time_zone: timeZone },\n comment: comment.trim() || null,\n })\n }}\n >\n <div className=\"flex flex-wrap items-center gap-2\">\n <Input\n type=\"date\"\n className=\"w-40\"\n aria-label=\"Date\"\n value={date}\n onChange={(e) => setDate(e.target.value)}\n data-testid=\"calendar-propose-date\"\n />\n <Input\n type=\"time\"\n className=\"w-28\"\n aria-label=\"Start time\"\n value={start}\n onChange={(e) => setStart(e.target.value)}\n data-testid=\"calendar-propose-start\"\n />\n <span className=\"text-muted-foreground\">–</span>\n <Input\n type=\"time\"\n className=\"w-28\"\n aria-label=\"End time\"\n value={end}\n onChange={(e) => setEnd(e.target.value)}\n data-testid=\"calendar-propose-end\"\n />\n </div>\n <Input\n placeholder=\"Add a note (optional)\"\n value={comment}\n maxLength={2000}\n onChange={(e) => setComment(e.target.value)}\n data-testid=\"calendar-propose-comment\"\n />\n <DialogFooter>\n <Button type=\"button\" variant=\"ghost\" onClick={onCancel}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={!valid || sending} data-testid=\"calendar-propose-send\">\n {sending ? 'Sending…' : 'Send proposal'}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n"]}
|