@arbidocs/blocks 0.5.58 → 0.5.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/README.md +40 -0
  2. package/dist/{ConnectedCallDock-SWDSHWTE.cjs → ConnectedCallDock-NEXHEXVL.cjs} +9 -9
  3. package/dist/{ConnectedCallDock-SWDSHWTE.cjs.map → ConnectedCallDock-NEXHEXVL.cjs.map} +1 -1
  4. package/dist/{ConnectedCallDock-HFQNXBH2.js → ConnectedCallDock-PMCWZXCO.js} +8 -8
  5. package/dist/{ConnectedCallDock-HFQNXBH2.js.map → ConnectedCallDock-PMCWZXCO.js.map} +1 -1
  6. package/dist/{ConnectedCallRoom-JOUQ5SM5.cjs → ConnectedCallRoom-GE2TMDIL.cjs} +9 -9
  7. package/dist/{ConnectedCallRoom-JOUQ5SM5.cjs.map → ConnectedCallRoom-GE2TMDIL.cjs.map} +1 -1
  8. package/dist/{ConnectedCallRoom-EGPYH7XF.js → ConnectedCallRoom-RJZT5ZUA.js} +8 -8
  9. package/dist/{ConnectedCallRoom-EGPYH7XF.js.map → ConnectedCallRoom-RJZT5ZUA.js.map} +1 -1
  10. package/dist/{ConnectedDocumentViewer-PGFWDHBI.cjs → ConnectedDocumentViewer-2KDPYQDT.cjs} +14 -13
  11. package/dist/{ConnectedDocumentViewer-PGFWDHBI.cjs.map → ConnectedDocumentViewer-2KDPYQDT.cjs.map} +1 -1
  12. package/dist/{ConnectedDocumentViewer-KIZCVZXV.js → ConnectedDocumentViewer-GYLXZV72.js} +13 -12
  13. package/dist/{ConnectedDocumentViewer-KIZCVZXV.js.map → ConnectedDocumentViewer-GYLXZV72.js.map} +1 -1
  14. package/dist/{ConnectedNativeDocxComparison-XJ66AM6C.cjs → ConnectedNativeDocxComparison-2OC37MR5.cjs} +8 -8
  15. package/dist/ConnectedNativeDocxComparison-2OC37MR5.cjs.map +1 -0
  16. package/dist/{ConnectedNativeDocxComparison-NGS4IMUZ.js → ConnectedNativeDocxComparison-7PD2LD7L.js} +7 -7
  17. package/dist/ConnectedNativeDocxComparison-7PD2LD7L.js.map +1 -0
  18. package/dist/{ConnectedNativeDocxEditor-23O5EH7F.cjs → ConnectedNativeDocxEditor-FPIX7SWU.cjs} +8 -8
  19. package/dist/ConnectedNativeDocxEditor-FPIX7SWU.cjs.map +1 -0
  20. package/dist/{ConnectedNativeDocxEditor-MJUFY74T.js → ConnectedNativeDocxEditor-UMENIC3E.js} +6 -6
  21. package/dist/ConnectedNativeDocxEditor-UMENIC3E.js.map +1 -0
  22. package/dist/{ConnectedStreamedWordArtifact-567Q2AOX.cjs → ConnectedStreamedWordArtifact-3UZN4UHY.cjs} +8 -8
  23. package/dist/ConnectedStreamedWordArtifact-3UZN4UHY.cjs.map +1 -0
  24. package/dist/{ConnectedStreamedWordArtifact-VWG2BXSW.js → ConnectedStreamedWordArtifact-K7HVTZIG.js} +7 -7
  25. package/dist/ConnectedStreamedWordArtifact-K7HVTZIG.js.map +1 -0
  26. package/dist/{DocumentReviewCard-4KB66DX4.cjs → DocumentReviewCard-B3RRCJBD.cjs} +5 -5
  27. package/dist/{DocumentReviewCard-4KB66DX4.cjs.map → DocumentReviewCard-B3RRCJBD.cjs.map} +1 -1
  28. package/dist/{DocumentReviewCard-AKIBUBPA.js → DocumentReviewCard-RPETGTSK.js} +5 -5
  29. package/dist/{DocumentReviewCard-AKIBUBPA.js.map → DocumentReviewCard-RPETGTSK.js.map} +1 -1
  30. package/dist/{WorkspaceTableView-ZXIW3MQ5.cjs → WorkspaceTableView-2XRSJECY.cjs} +8 -8
  31. package/dist/{WorkspaceTableView-ZXIW3MQ5.cjs.map → WorkspaceTableView-2XRSJECY.cjs.map} +1 -1
  32. package/dist/{WorkspaceTableView-3VP56J6F.js → WorkspaceTableView-F4QG4226.js} +6 -6
  33. package/dist/{WorkspaceTableView-3VP56J6F.js.map → WorkspaceTableView-F4QG4226.js.map} +1 -1
  34. package/dist/agents/index.cjs +341 -341
  35. package/dist/agents/index.js +5 -5
  36. package/dist/calendar/index.cjs +116 -116
  37. package/dist/calendar/index.js +1 -1
  38. package/dist/calls/index.cjs +2 -2
  39. package/dist/calls/index.js +2 -2
  40. package/dist/chat/index.cjs +82 -82
  41. package/dist/chat/index.js +5 -5
  42. package/dist/chunk-34HQO4ZQ.cjs +72 -0
  43. package/dist/chunk-34HQO4ZQ.cjs.map +1 -0
  44. package/dist/{chunk-EQ3WRY2N.js → chunk-3EWS6ECM.js} +9 -6
  45. package/dist/chunk-3EWS6ECM.js.map +1 -0
  46. package/dist/{chunk-Y564AOO6.js → chunk-6HMWZY3U.js} +3 -3
  47. package/dist/{chunk-Y564AOO6.js.map → chunk-6HMWZY3U.js.map} +1 -1
  48. package/dist/{chunk-FB6DTNMF.cjs → chunk-6TMA6MPT.cjs} +8 -8
  49. package/dist/{chunk-FB6DTNMF.cjs.map → chunk-6TMA6MPT.cjs.map} +1 -1
  50. package/dist/{chunk-WIW3XGHO.js → chunk-75Z5AUMM.js} +3 -3
  51. package/dist/{chunk-WIW3XGHO.js.map → chunk-75Z5AUMM.js.map} +1 -1
  52. package/dist/{chunk-4TCJDGIM.js → chunk-7EOO6ZCK.js} +3 -3
  53. package/dist/{chunk-4TCJDGIM.js.map → chunk-7EOO6ZCK.js.map} +1 -1
  54. package/dist/{chunk-AJCMN23Q.js → chunk-AGDOBXHY.js} +3 -3
  55. package/dist/{chunk-AJCMN23Q.js.map → chunk-AGDOBXHY.js.map} +1 -1
  56. package/dist/{chunk-E5RN3LWS.js → chunk-AWVGKHJT.js} +2 -2
  57. package/dist/{chunk-E5RN3LWS.js.map → chunk-AWVGKHJT.js.map} +1 -1
  58. package/dist/{chunk-4TQGWQHK.js → chunk-B63TSC3W.js} +96 -5
  59. package/dist/chunk-B63TSC3W.js.map +1 -0
  60. package/dist/{chunk-HC4GCNCQ.js → chunk-B7XMGAWP.js} +3 -32
  61. package/dist/chunk-B7XMGAWP.js.map +1 -0
  62. package/dist/{chunk-I5BYLF6V.cjs → chunk-BSITLJMQ.cjs} +4 -4
  63. package/dist/{chunk-I5BYLF6V.cjs.map → chunk-BSITLJMQ.cjs.map} +1 -1
  64. package/dist/{chunk-K3B3V6EA.js → chunk-CYECDWVY.js} +3 -3
  65. package/dist/{chunk-K3B3V6EA.js.map → chunk-CYECDWVY.js.map} +1 -1
  66. package/dist/{chunk-C3FVQIBJ.js → chunk-DP7XGB2D.js} +3 -3
  67. package/dist/{chunk-C3FVQIBJ.js.map → chunk-DP7XGB2D.js.map} +1 -1
  68. package/dist/{chunk-K7OBYDUO.cjs → chunk-ECJOIWF4.cjs} +52 -14
  69. package/dist/chunk-ECJOIWF4.cjs.map +1 -0
  70. package/dist/{chunk-AMZNWDTN.cjs → chunk-GCMNPIKB.cjs} +6 -6
  71. package/dist/{chunk-AMZNWDTN.cjs.map → chunk-GCMNPIKB.cjs.map} +1 -1
  72. package/dist/{chunk-4MSQJ6GX.js → chunk-GYONAUKV.js} +8 -8
  73. package/dist/{chunk-4MSQJ6GX.js.map → chunk-GYONAUKV.js.map} +1 -1
  74. package/dist/chunk-IRPDQJNT.js +70 -0
  75. package/dist/chunk-IRPDQJNT.js.map +1 -0
  76. package/dist/{chunk-Q5BWRMET.cjs → chunk-IZXJTVOS.cjs} +44 -7
  77. package/dist/chunk-IZXJTVOS.cjs.map +1 -0
  78. package/dist/{chunk-JFNF6HTE.cjs → chunk-J2A7LVTM.cjs} +67 -67
  79. package/dist/{chunk-JFNF6HTE.cjs.map → chunk-J2A7LVTM.cjs.map} +1 -1
  80. package/dist/{chunk-HIDCHFFI.js → chunk-JLR67BW2.js} +46 -10
  81. package/dist/chunk-JLR67BW2.js.map +1 -0
  82. package/dist/{chunk-OMWOPRQR.cjs → chunk-JZ4LN4Q6.cjs} +3 -3
  83. package/dist/{chunk-OMWOPRQR.cjs.map → chunk-JZ4LN4Q6.cjs.map} +1 -1
  84. package/dist/{chunk-SUW7USWW.js → chunk-L4JJKGUD.js} +3 -3
  85. package/dist/{chunk-SUW7USWW.js.map → chunk-L4JJKGUD.js.map} +1 -1
  86. package/dist/{chunk-2LK27F43.cjs → chunk-LVC4ZGYW.cjs} +17 -17
  87. package/dist/{chunk-2LK27F43.cjs.map → chunk-LVC4ZGYW.cjs.map} +1 -1
  88. package/dist/{chunk-HXAWPMRJ.cjs → chunk-LXKALYOS.cjs} +5 -5
  89. package/dist/{chunk-HXAWPMRJ.cjs.map → chunk-LXKALYOS.cjs.map} +1 -1
  90. package/dist/{chunk-TM2D4XT4.cjs → chunk-MZZ3SBQL.cjs} +9 -6
  91. package/dist/chunk-MZZ3SBQL.cjs.map +1 -0
  92. package/dist/{chunk-RJ7753W5.js → chunk-NMU723IY.js} +5 -5
  93. package/dist/{chunk-RJ7753W5.js.map → chunk-NMU723IY.js.map} +1 -1
  94. package/dist/{chunk-T2DUORCT.cjs → chunk-NUAG57PG.cjs} +18 -18
  95. package/dist/{chunk-T2DUORCT.cjs.map → chunk-NUAG57PG.cjs.map} +1 -1
  96. package/dist/{chunk-ICQWNUDD.js → chunk-NXSPX7AP.js} +3 -3
  97. package/dist/{chunk-ICQWNUDD.js.map → chunk-NXSPX7AP.js.map} +1 -1
  98. package/dist/{chunk-N27CI32R.cjs → chunk-OM5IVNEW.cjs} +7 -7
  99. package/dist/{chunk-N27CI32R.cjs.map → chunk-OM5IVNEW.cjs.map} +1 -1
  100. package/dist/{chunk-I3BF67WQ.cjs → chunk-Q5GFVDFM.cjs} +9 -9
  101. package/dist/{chunk-I3BF67WQ.cjs.map → chunk-Q5GFVDFM.cjs.map} +1 -1
  102. package/dist/{chunk-ELY7WGBN.js → chunk-QCDS3ZCF.js} +3 -3
  103. package/dist/{chunk-ELY7WGBN.js.map → chunk-QCDS3ZCF.js.map} +1 -1
  104. package/dist/{chunk-VEMJON3H.cjs → chunk-QUTIWGWO.cjs} +3 -3
  105. package/dist/{chunk-VEMJON3H.cjs.map → chunk-QUTIWGWO.cjs.map} +1 -1
  106. package/dist/{chunk-PPXY4F3C.js → chunk-R6UKY6NA.js} +5 -5
  107. package/dist/{chunk-PPXY4F3C.js.map → chunk-R6UKY6NA.js.map} +1 -1
  108. package/dist/{chunk-HG5J7G5H.js → chunk-RGRQWMTF.js} +43 -6
  109. package/dist/chunk-RGRQWMTF.js.map +1 -0
  110. package/dist/{chunk-HWT2IHT4.js → chunk-S45JNJK7.js} +3 -3
  111. package/dist/{chunk-HWT2IHT4.js.map → chunk-S45JNJK7.js.map} +1 -1
  112. package/dist/{chunk-WH2BIMAZ.js → chunk-SBVOYSOO.js} +3 -3
  113. package/dist/{chunk-WH2BIMAZ.js.map → chunk-SBVOYSOO.js.map} +1 -1
  114. package/dist/chunk-SUVMOGTC.js +132 -0
  115. package/dist/chunk-SUVMOGTC.js.map +1 -0
  116. package/dist/chunk-TAVQOU3M.cjs +137 -0
  117. package/dist/chunk-TAVQOU3M.cjs.map +1 -0
  118. package/dist/{chunk-VO3VUC44.cjs → chunk-TFTGDUE4.cjs} +27 -27
  119. package/dist/{chunk-VO3VUC44.cjs.map → chunk-TFTGDUE4.cjs.map} +1 -1
  120. package/dist/{chunk-53AGHUFO.cjs → chunk-TX4CIWH5.cjs} +96 -3
  121. package/dist/chunk-TX4CIWH5.cjs.map +1 -0
  122. package/dist/{chunk-Q3SG3BWO.js → chunk-UIUWCTIZ.js} +3 -3
  123. package/dist/{chunk-Q3SG3BWO.js.map → chunk-UIUWCTIZ.js.map} +1 -1
  124. package/dist/{chunk-T6C5Z4CS.cjs → chunk-UR3MPRJA.cjs} +4 -4
  125. package/dist/{chunk-T6C5Z4CS.cjs.map → chunk-UR3MPRJA.cjs.map} +1 -1
  126. package/dist/{chunk-OFYTC2QC.js → chunk-VB7VPTMB.js} +9 -9
  127. package/dist/{chunk-OFYTC2QC.js.map → chunk-VB7VPTMB.js.map} +1 -1
  128. package/dist/{chunk-QJHU6BEE.cjs → chunk-VTY44LKS.cjs} +11 -11
  129. package/dist/{chunk-QJHU6BEE.cjs.map → chunk-VTY44LKS.cjs.map} +1 -1
  130. package/dist/{chunk-LM7DVT7C.cjs → chunk-W3PSIIMN.cjs} +2 -2
  131. package/dist/{chunk-LM7DVT7C.cjs.map → chunk-W3PSIIMN.cjs.map} +1 -1
  132. package/dist/{chunk-Z2KOIA5D.cjs → chunk-W427WPYF.cjs} +2 -32
  133. package/dist/chunk-W427WPYF.cjs.map +1 -0
  134. package/dist/{chunk-FDETJCMV.cjs → chunk-XNZSVCNR.cjs} +4 -4
  135. package/dist/{chunk-FDETJCMV.cjs.map → chunk-XNZSVCNR.cjs.map} +1 -1
  136. package/dist/{chunk-CWV4SLRT.js → chunk-YA2H33OW.js} +4 -4
  137. package/dist/{chunk-CWV4SLRT.js.map → chunk-YA2H33OW.js.map} +1 -1
  138. package/dist/{chunk-X2AIPVIT.cjs → chunk-YD3RN2FY.cjs} +3 -3
  139. package/dist/{chunk-X2AIPVIT.cjs.map → chunk-YD3RN2FY.cjs.map} +1 -1
  140. package/dist/{chunk-22UJW54C.js → chunk-YXX63XJD.js} +3 -3
  141. package/dist/{chunk-22UJW54C.js.map → chunk-YXX63XJD.js.map} +1 -1
  142. package/dist/{chunk-OS27G5ZI.js → chunk-Z3MWFHZC.js} +3 -3
  143. package/dist/{chunk-OS27G5ZI.js.map → chunk-Z3MWFHZC.js.map} +1 -1
  144. package/dist/{chunk-XUEJYHEP.cjs → chunk-ZDZY6OPL.cjs} +3 -3
  145. package/dist/{chunk-XUEJYHEP.cjs.map → chunk-ZDZY6OPL.cjs.map} +1 -1
  146. package/dist/{chunk-SNUWLNVU.cjs → chunk-ZQDJRROK.cjs} +22 -22
  147. package/dist/{chunk-SNUWLNVU.cjs.map → chunk-ZQDJRROK.cjs.map} +1 -1
  148. package/dist/{chunk-QDHVZ56E.cjs → chunk-ZTTR5MMZ.cjs} +8 -8
  149. package/dist/{chunk-QDHVZ56E.cjs.map → chunk-ZTTR5MMZ.cjs.map} +1 -1
  150. package/dist/components/Banner.d.ts +9 -3
  151. package/dist/components/ErrorBoundary.d.ts +16 -1
  152. package/dist/components/LoadingIndicator.d.ts +14 -1
  153. package/dist/connect/docx.cjs +10 -10
  154. package/dist/connect/docx.js +6 -6
  155. package/dist/connect/index.cjs +840 -840
  156. package/dist/connect/index.js +29 -29
  157. package/dist/connect/viewer.cjs +13 -12
  158. package/dist/connect/viewer.js +11 -10
  159. package/dist/facts/index.cjs +56 -56
  160. package/dist/facts/index.js +4 -4
  161. package/dist/files/index.cjs +1 -1
  162. package/dist/files/index.js +1 -1
  163. package/dist/home/index.cjs +29 -29
  164. package/dist/home/index.js +4 -4
  165. package/dist/index.cjs +678 -661
  166. package/dist/index.cjs.map +1 -1
  167. package/dist/index.d.ts +1 -1
  168. package/dist/index.js +19 -18
  169. package/dist/index.js.map +1 -1
  170. package/dist/settings/ErrorDialog.d.ts +21 -1
  171. package/dist/settings/error-report.d.ts +26 -0
  172. package/dist/settings/index.cjs +163 -155
  173. package/dist/settings/index.d.ts +2 -1
  174. package/dist/settings/index.js +3 -3
  175. package/dist/shell/AccountBanners.d.ts +22 -0
  176. package/dist/shell/Toaster.d.ts +24 -2
  177. package/dist/shell/index.cjs +61 -44
  178. package/dist/shell/index.d.ts +2 -1
  179. package/dist/shell/index.js +3 -2
  180. package/dist/site/index.cjs +55 -54
  181. package/dist/site/index.js +3 -2
  182. package/dist/studio/index.cjs +54 -53
  183. package/dist/studio/index.cjs.map +1 -1
  184. package/dist/studio/index.js +7 -6
  185. package/dist/studio/index.js.map +1 -1
  186. package/dist/workflow-canvas/index.cjs +36 -36
  187. package/dist/workflow-canvas/index.js +11 -11
  188. package/node_modules/@arbidocs/coedit/package.json +1 -1
  189. package/package.json +5 -5
  190. package/src/blocks.css +83 -2
  191. package/dist/ConnectedNativeDocxComparison-NGS4IMUZ.js.map +0 -1
  192. package/dist/ConnectedNativeDocxComparison-XJ66AM6C.cjs.map +0 -1
  193. package/dist/ConnectedNativeDocxEditor-23O5EH7F.cjs.map +0 -1
  194. package/dist/ConnectedNativeDocxEditor-MJUFY74T.js.map +0 -1
  195. package/dist/ConnectedStreamedWordArtifact-567Q2AOX.cjs.map +0 -1
  196. package/dist/ConnectedStreamedWordArtifact-VWG2BXSW.js.map +0 -1
  197. package/dist/chunk-4TQGWQHK.js.map +0 -1
  198. package/dist/chunk-53AGHUFO.cjs.map +0 -1
  199. package/dist/chunk-EQ3WRY2N.js.map +0 -1
  200. package/dist/chunk-HC4GCNCQ.js.map +0 -1
  201. package/dist/chunk-HG5J7G5H.js.map +0 -1
  202. package/dist/chunk-HIDCHFFI.js.map +0 -1
  203. package/dist/chunk-K7OBYDUO.cjs.map +0 -1
  204. package/dist/chunk-Q5BWRMET.cjs.map +0 -1
  205. package/dist/chunk-SOZQJTHB.js +0 -34
  206. package/dist/chunk-SOZQJTHB.js.map +0 -1
  207. package/dist/chunk-TM2D4XT4.cjs.map +0 -1
  208. package/dist/chunk-VTQOMJW7.cjs +0 -37
  209. package/dist/chunk-VTQOMJW7.cjs.map +0 -1
  210. package/dist/chunk-Z2KOIA5D.cjs.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":["NativeSelect","jsx","jsxs","end","cn","h","useState","useMemo","ChevronLeft","ChevronRight","Fragment","Lightbulb","Workflow","ListTodo","Lock","start","a","minutes","document","Input","Button","Globe","Repeat","Video","Plus","MapPin","Trash2","X","CalendarDays","Users","Clock","Paperclip","Tag","Bell","DoorOpen","useId","Switch","Textarea","from","timedSpec","useEffect","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter"],"mappings":"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","file":"chunk-E5RN3LWS.js","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 nowIndicator = true,\n onRangeChange,\n onSelectSlot,\n onEventClick,\n onEventChange,\n onViewChange,\n onDateChange,\n onCreateShortcut,\n height,\n labels: labelOverrides,\n hideToolbar,\n toolbarEnd,\n className,\n keyboardShortcuts = true,\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.\n useEffect(() => {\n if (!keyboardShortcuts) return\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 }, [keyboardShortcuts, 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 {!hideToolbar && (\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 )}\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={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; `printCalendar()` without props prints the first mounted `<CalendarPrint>`.\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 /** Hide on screen (only shown when printing). Default false. */\n screenHidden?: boolean\n /** Show location and description in agenda / day views. Default true. */\n showDetails?: boolean\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 screen { .arbi-calendar-print[data-screen-hidden='true'] { display: none; } }\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 screenHidden = false,\n showDetails = true,\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, showDetails))}\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\n className=\"arbi-calendar-print\"\n data-screen-hidden={screenHidden ? 'true' : 'false'}\n data-testid=\"calendar-print\"\n >\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. With `props`, the view is rendered\n * into a temporary body-level host; without, the first mounted `<CalendarPrint>` is copied there.\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 let unmount: (() => void) | null = null\n if (props) {\n const root = createRoot(host)\n flushSync(() => root.render(<CalendarPrint {...props} screenHidden={false} />))\n unmount = () => root.unmount()\n } else {\n const existing = document.querySelector('.arbi-calendar-print')\n if (!existing) {\n host.remove()\n return\n }\n const clone = existing.cloneNode(true) as HTMLElement\n clone.setAttribute('data-screen-hidden', 'false')\n host.appendChild(clone)\n }\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 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":["NativeSelect","jsx","jsxs","end","cn","h","useState","useMemo","ChevronLeft","ChevronRight","Fragment","Lightbulb","Workflow","ListTodo","Lock","start","a","minutes","document","Input","Button","Globe","Repeat","Video","Plus","MapPin","Trash2","X","CalendarDays","Users","Clock","Paperclip","Tag","Bell","DoorOpen","useId","Switch","Textarea","from","timedSpec","useEffect","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter"],"mappings":"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","file":"chunk-AWVGKHJT.js","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 nowIndicator = true,\n onRangeChange,\n onSelectSlot,\n onEventClick,\n onEventChange,\n onViewChange,\n onDateChange,\n onCreateShortcut,\n height,\n labels: labelOverrides,\n hideToolbar,\n toolbarEnd,\n className,\n keyboardShortcuts = true,\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.\n useEffect(() => {\n if (!keyboardShortcuts) return\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 }, [keyboardShortcuts, 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 {!hideToolbar && (\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 )}\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={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; `printCalendar()` without props prints the first mounted `<CalendarPrint>`.\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 /** Hide on screen (only shown when printing). Default false. */\n screenHidden?: boolean\n /** Show location and description in agenda / day views. Default true. */\n showDetails?: boolean\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 screen { .arbi-calendar-print[data-screen-hidden='true'] { display: none; } }\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 screenHidden = false,\n showDetails = true,\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, showDetails))}\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\n className=\"arbi-calendar-print\"\n data-screen-hidden={screenHidden ? 'true' : 'false'}\n data-testid=\"calendar-print\"\n >\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. With `props`, the view is rendered\n * into a temporary body-level host; without, the first mounted `<CalendarPrint>` is copied there.\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 let unmount: (() => void) | null = null\n if (props) {\n const root = createRoot(host)\n flushSync(() => root.render(<CalendarPrint {...props} screenHidden={false} />))\n unmount = () => root.unmount()\n } else {\n const existing = document.querySelector('.arbi-calendar-print')\n if (!existing) {\n host.remove()\n return\n }\n const clone = existing.cloneNode(true) as HTMLElement\n clone.setAttribute('data-screen-hidden', 'false')\n host.appendChild(clone)\n }\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 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"]}