@arbidocs/blocks 0.4.128 → 0.4.130
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -10
- package/dist/{StreamedArtifactEditor-EEYAXJ4H.cjs → StreamedArtifactEditor-TQAND4H5.cjs} +6 -5
- package/dist/StreamedArtifactEditor-TQAND4H5.cjs.map +1 -0
- package/dist/{StreamedArtifactEditor-TDATDYD2.js → StreamedArtifactEditor-XQNANTWM.js} +4 -3
- package/dist/StreamedArtifactEditor-XQNANTWM.js.map +1 -0
- package/dist/agents/index.cjs +304 -304
- package/dist/agents/index.js +12 -12
- package/dist/artifacts/ArtifactCodeView.d.ts +6 -0
- package/dist/artifacts/ArtifactPreview.d.ts +22 -0
- package/dist/artifacts/index.cjs +50 -21
- package/dist/artifacts/index.d.ts +3 -0
- package/dist/artifacts/index.js +2 -1
- package/dist/artifacts/sandbox-policy.d.ts +34 -0
- package/dist/artifacts/sandboxDocument.d.ts +7 -0
- package/dist/calendar/CalendarPrint.d.ts +25 -0
- package/dist/calendar/booking-slots.d.ts +21 -0
- package/dist/calendar/index.cjs +440 -243
- package/dist/calendar/index.cjs.map +1 -1
- package/dist/calendar/index.d.ts +4 -0
- package/dist/calendar/index.js +282 -151
- package/dist/calendar/index.js.map +1 -1
- package/dist/calendar/print-layout.d.ts +16 -0
- package/dist/calendar/printCalendar.d.ts +6 -0
- package/dist/calls/composite-canvas.d.ts +52 -0
- package/dist/calls/index.cjs +376 -3
- package/dist/calls/index.cjs.map +1 -1
- package/dist/calls/index.d.ts +3 -0
- package/dist/calls/index.js +360 -5
- package/dist/calls/index.js.map +1 -1
- package/dist/calls/ringtone.d.ts +16 -0
- package/dist/calls/voice-levels.d.ts +32 -0
- package/dist/chat/ThreadVisualizer.d.ts +28 -0
- package/dist/chat/index.cjs +156 -140
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +5 -5
- package/dist/chat/open-document.d.ts +5 -1
- package/dist/chat/thread-diagram.d.ts +26 -0
- package/dist/{chunk-7HAM7Y5U.js → chunk-2DFDFOM7.js} +3 -3
- package/dist/{chunk-7HAM7Y5U.js.map → chunk-2DFDFOM7.js.map} +1 -1
- package/dist/{chunk-54ANPPMV.js → chunk-2PNNCEPH.js} +4 -4
- package/dist/{chunk-54ANPPMV.js.map → chunk-2PNNCEPH.js.map} +1 -1
- package/dist/{chunk-DQCYCEDR.js → chunk-2Q7FDZAY.js} +3 -3
- package/dist/{chunk-DQCYCEDR.js.map → chunk-2Q7FDZAY.js.map} +1 -1
- package/dist/{chunk-INW76PEL.cjs → chunk-2YV7FBLO.cjs} +175 -2
- package/dist/chunk-2YV7FBLO.cjs.map +1 -0
- package/dist/{chunk-S7PSMMRG.js → chunk-444XKG46.js} +3 -3
- package/dist/{chunk-S7PSMMRG.js.map → chunk-444XKG46.js.map} +1 -1
- package/dist/{chunk-FSBY2S4V.cjs → chunk-4QIIDXLF.cjs} +10 -10
- package/dist/{chunk-FSBY2S4V.cjs.map → chunk-4QIIDXLF.cjs.map} +1 -1
- package/dist/{chunk-OYMWV45N.js → chunk-4RLCRFZS.js} +63 -13
- package/dist/chunk-4RLCRFZS.js.map +1 -0
- package/dist/{chunk-NZUQFF35.cjs → chunk-4S5IDT5F.cjs} +234 -5
- package/dist/chunk-4S5IDT5F.cjs.map +1 -0
- package/dist/{chunk-CJBN5HIS.js → chunk-4UMXQPNA.js} +20 -8
- package/dist/chunk-4UMXQPNA.js.map +1 -0
- package/dist/{chunk-KELGOCJA.js → chunk-65S53MZK.js} +174 -5
- package/dist/chunk-65S53MZK.js.map +1 -0
- package/dist/{chunk-IBZJYCYM.js → chunk-66TA5IBN.js} +17 -25
- package/dist/chunk-66TA5IBN.js.map +1 -0
- package/dist/{chunk-HM23LXUP.cjs → chunk-6AALMYPS.cjs} +3 -3
- package/dist/{chunk-HM23LXUP.cjs.map → chunk-6AALMYPS.cjs.map} +1 -1
- package/dist/{chunk-OR4CO743.cjs → chunk-AAFX64WD.cjs} +3 -3
- package/dist/{chunk-OR4CO743.cjs.map → chunk-AAFX64WD.cjs.map} +1 -1
- package/dist/{chunk-MUMH3Z6K.cjs → chunk-ARDHLU73.cjs} +61 -11
- package/dist/chunk-ARDHLU73.cjs.map +1 -0
- package/dist/chunk-BIXHB4LV.cjs +178 -0
- package/dist/chunk-BIXHB4LV.cjs.map +1 -0
- package/dist/chunk-C4WSHRR6.cjs +166 -0
- package/dist/chunk-C4WSHRR6.cjs.map +1 -0
- package/dist/{chunk-ZAVEMQ37.cjs → chunk-DWZXSPMB.cjs} +3 -3
- package/dist/{chunk-ZAVEMQ37.cjs.map → chunk-DWZXSPMB.cjs.map} +1 -1
- package/dist/{chunk-VW2C2AZL.js → chunk-ENDP7JER.js} +3 -3
- package/dist/{chunk-VW2C2AZL.js.map → chunk-ENDP7JER.js.map} +1 -1
- package/dist/{chunk-5HFPRI3W.js → chunk-FUTMU4FR.js} +3 -3
- package/dist/{chunk-5HFPRI3W.js.map → chunk-FUTMU4FR.js.map} +1 -1
- package/dist/{chunk-P5ST47VY.js → chunk-GDBDHOI4.js} +3 -3
- package/dist/{chunk-P5ST47VY.js.map → chunk-GDBDHOI4.js.map} +1 -1
- package/dist/chunk-GTCC2VAR.js +153 -0
- package/dist/chunk-GTCC2VAR.js.map +1 -0
- package/dist/{chunk-3BJLNKOB.cjs → chunk-GZPTWHP5.cjs} +22 -10
- package/dist/chunk-GZPTWHP5.cjs.map +1 -0
- package/dist/{chunk-OUW6G4O2.cjs → chunk-HFGXA5CL.cjs} +4 -4
- package/dist/{chunk-OUW6G4O2.cjs.map → chunk-HFGXA5CL.cjs.map} +1 -1
- package/dist/{chunk-SWQX6CTT.cjs → chunk-JKB7WT7L.cjs} +2 -2
- package/dist/chunk-JKB7WT7L.cjs.map +1 -0
- package/dist/{chunk-D4YR56FV.cjs → chunk-KYDRUFWT.cjs} +5 -5
- package/dist/{chunk-D4YR56FV.cjs.map → chunk-KYDRUFWT.cjs.map} +1 -1
- package/dist/chunk-NS4JD2VR.js +22 -0
- package/dist/chunk-NS4JD2VR.js.map +1 -0
- package/dist/{chunk-S6BOINC4.cjs → chunk-OGBXV326.cjs} +7 -7
- package/dist/{chunk-S6BOINC4.cjs.map → chunk-OGBXV326.cjs.map} +1 -1
- package/dist/{chunk-DJM7DLCT.cjs → chunk-OPTBQSCV.cjs} +3 -3
- package/dist/{chunk-DJM7DLCT.cjs.map → chunk-OPTBQSCV.cjs.map} +1 -1
- package/dist/{chunk-GFYGYME3.js → chunk-OQ7RUNOC.js} +3 -3
- package/dist/{chunk-GFYGYME3.js.map → chunk-OQ7RUNOC.js.map} +1 -1
- package/dist/{chunk-WV4IDVDQ.cjs → chunk-PJJY6CYL.cjs} +11 -11
- package/dist/{chunk-WV4IDVDQ.cjs.map → chunk-PJJY6CYL.cjs.map} +1 -1
- package/dist/{chunk-CXLVI3SB.js → chunk-PUCY3UXN.js} +3 -3
- package/dist/{chunk-CXLVI3SB.js.map → chunk-PUCY3UXN.js.map} +1 -1
- package/dist/{chunk-ZV3BKLFY.cjs → chunk-QDEODGXE.cjs} +5 -5
- package/dist/{chunk-ZV3BKLFY.cjs.map → chunk-QDEODGXE.cjs.map} +1 -1
- package/dist/{chunk-7BJRLP3U.js → chunk-QYTYW74G.js} +5 -5
- package/dist/{chunk-7BJRLP3U.js.map → chunk-QYTYW74G.js.map} +1 -1
- package/dist/{chunk-A7NCSZAP.cjs → chunk-QZTNTP75.cjs} +17 -25
- package/dist/chunk-QZTNTP75.cjs.map +1 -0
- package/dist/{chunk-OB5F4577.cjs → chunk-R26BK7YL.cjs} +4 -4
- package/dist/{chunk-OB5F4577.cjs.map → chunk-R26BK7YL.cjs.map} +1 -1
- package/dist/{chunk-A2YAC22G.js → chunk-RI6DZA5X.js} +3 -3
- package/dist/{chunk-A2YAC22G.js.map → chunk-RI6DZA5X.js.map} +1 -1
- package/dist/{chunk-LC2KJSUS.cjs → chunk-SARREDFP.cjs} +46 -46
- package/dist/{chunk-LC2KJSUS.cjs.map → chunk-SARREDFP.cjs.map} +1 -1
- package/dist/{chunk-ZCHSJUCI.js → chunk-SZX44LCT.js} +231 -6
- package/dist/chunk-SZX44LCT.js.map +1 -0
- package/dist/{chunk-7QDX2CO4.cjs → chunk-TP6PLDNM.cjs} +4 -4
- package/dist/{chunk-7QDX2CO4.cjs.map → chunk-TP6PLDNM.cjs.map} +1 -1
- package/dist/{chunk-W27VK32R.cjs → chunk-TT6XV6WM.cjs} +84 -84
- package/dist/{chunk-W27VK32R.cjs.map → chunk-TT6XV6WM.cjs.map} +1 -1
- package/dist/{chunk-KLOSOT26.js → chunk-UMIY4SQS.js} +11 -11
- package/dist/{chunk-KLOSOT26.js.map → chunk-UMIY4SQS.js.map} +1 -1
- package/dist/chunk-VG24E4JJ.cjs +26 -0
- package/dist/chunk-VG24E4JJ.cjs.map +1 -0
- package/dist/{chunk-ECERC6TI.js → chunk-VHJHY7TT.js} +3 -3
- package/dist/{chunk-ECERC6TI.js.map → chunk-VHJHY7TT.js.map} +1 -1
- package/dist/{chunk-D3N67Q4D.js → chunk-W3VYZXNS.js} +3 -3
- package/dist/{chunk-D3N67Q4D.js.map → chunk-W3VYZXNS.js.map} +1 -1
- package/dist/{chunk-JK45LSIH.cjs → chunk-WXYQ66KC.cjs} +5 -5
- package/dist/{chunk-JK45LSIH.cjs.map → chunk-WXYQ66KC.cjs.map} +1 -1
- package/dist/{chunk-ZCF2JJFA.js → chunk-Y3KA6X7B.js} +3 -3
- package/dist/{chunk-ZCF2JJFA.js.map → chunk-Y3KA6X7B.js.map} +1 -1
- package/dist/{chunk-GYCQ3FNL.js → chunk-YBLIKTJK.js} +2 -2
- package/dist/chunk-YBLIKTJK.js.map +1 -0
- package/dist/chunk-YNIBUKV5.js +163 -0
- package/dist/chunk-YNIBUKV5.js.map +1 -0
- package/dist/citations/index.cjs +12 -11
- package/dist/citations/index.js +3 -2
- package/dist/collaboration/index.cjs +51 -51
- package/dist/collaboration/index.js +3 -3
- package/dist/components/DroppableContainer.d.ts +6 -0
- package/dist/components/GridRowNavigator.d.ts +29 -0
- package/dist/components/LoadingIndicator.d.ts +21 -0
- package/dist/components/RowNavigatorControls.d.ts +29 -0
- package/dist/components/SharedCell.d.ts +27 -0
- package/dist/connect/docx.cjs +7 -5
- package/dist/connect/docx.cjs.map +1 -1
- package/dist/connect/docx.js +6 -4
- package/dist/connect/docx.js.map +1 -1
- package/dist/connect/index.cjs +270 -227
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +1 -1
- package/dist/connect/index.js +199 -156
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/ConnectedSettings.d.ts +46 -20
- package/dist/connection/ConnectionProvider.d.ts +5 -0
- package/dist/connection/mail/ConnectedMailComposer.d.ts +2 -3
- package/dist/connection/mail/ConnectedMailbox.d.ts +2 -3
- package/dist/connection/mail/MailComposerForm.d.ts +2 -3
- package/dist/connection/mail/index.d.ts +2 -2
- package/dist/connection/mail/mailbox.d.ts +1 -4
- package/dist/connection/mail/types.d.ts +0 -8
- package/dist/document-tools/index.cjs +1 -1
- package/dist/document-tools/index.js +1 -1
- package/dist/facts/fact-citations.d.ts +56 -0
- package/dist/facts/fact-table-column-resize.d.ts +18 -0
- package/dist/facts/index.cjs +198 -29
- package/dist/facts/index.cjs.map +1 -1
- package/dist/facts/index.d.ts +2 -1
- package/dist/facts/index.js +187 -27
- package/dist/facts/index.js.map +1 -1
- package/dist/files/index.cjs +4 -4
- package/dist/files/index.js +3 -3
- package/dist/home/index.cjs +20 -19
- package/dist/home/index.cjs.map +1 -1
- package/dist/home/index.js +5 -4
- package/dist/home/index.js.map +1 -1
- package/dist/index.cjs +877 -679
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.js +207 -30
- package/dist/index.js.map +1 -1
- package/dist/provider/BlocksProvider.d.ts +39 -4
- package/dist/provider/dialogs.d.ts +31 -0
- package/dist/retrieval/index.cjs +5 -4
- package/dist/retrieval/index.js +3 -2
- package/dist/sandboxDocument-JLEETIWW.js +71 -0
- package/dist/sandboxDocument-JLEETIWW.js.map +1 -0
- package/dist/sandboxDocument-WQUNODSC.cjs +76 -0
- package/dist/sandboxDocument-WQUNODSC.cjs.map +1 -0
- package/dist/settings/DraggableHeader.d.ts +10 -0
- package/dist/settings/FilterChip.d.ts +15 -0
- package/dist/settings/MessageJsonTree.d.ts +7 -0
- package/dist/settings/MoreInfo.d.ts +25 -0
- package/dist/settings/PlanCard.d.ts +1 -1
- package/dist/settings/index.cjs +363 -266
- package/dist/settings/index.cjs.map +1 -1
- package/dist/settings/index.d.ts +4 -1
- package/dist/settings/index.js +317 -222
- package/dist/settings/index.js.map +1 -1
- package/dist/settings/message-schema-hints.d.ts +19 -0
- package/dist/shell/index.cjs +48 -47
- package/dist/shell/index.js +4 -3
- package/dist/site/index.cjs +5 -5
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +19 -18
- package/dist/studio/index.cjs.map +1 -1
- package/dist/studio/index.js +11 -10
- package/dist/studio/index.js.map +1 -1
- package/dist/workflow-canvas/index.cjs +65 -65
- package/dist/workflow-canvas/index.js +13 -13
- package/dist/workspaces/index.cjs +42 -3
- package/dist/workspaces/index.cjs.map +1 -1
- package/dist/workspaces/index.d.ts +1 -0
- package/dist/workspaces/index.js +38 -3
- package/dist/workspaces/index.js.map +1 -1
- package/dist/workspaces/workspace-type.d.ts +29 -0
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +10 -4
- package/dist/StreamedArtifactEditor-EEYAXJ4H.cjs.map +0 -1
- package/dist/StreamedArtifactEditor-TDATDYD2.js.map +0 -1
- package/dist/chunk-3BJLNKOB.cjs.map +0 -1
- package/dist/chunk-76JDDMSP.js +0 -31
- package/dist/chunk-76JDDMSP.js.map +0 -1
- package/dist/chunk-A7NCSZAP.cjs.map +0 -1
- package/dist/chunk-C54XEN5T.cjs +0 -34
- package/dist/chunk-C54XEN5T.cjs.map +0 -1
- package/dist/chunk-CJBN5HIS.js.map +0 -1
- package/dist/chunk-GYCQ3FNL.js.map +0 -1
- package/dist/chunk-IBZJYCYM.js.map +0 -1
- package/dist/chunk-INW76PEL.cjs.map +0 -1
- package/dist/chunk-KELGOCJA.js.map +0 -1
- package/dist/chunk-MUMH3Z6K.cjs.map +0 -1
- package/dist/chunk-NZUQFF35.cjs.map +0 -1
- package/dist/chunk-OYMWV45N.js.map +0 -1
- package/dist/chunk-SWQX6CTT.cjs.map +0 -1
- package/dist/chunk-ZCHSJUCI.js.map +0 -1
- package/dist/facts/timezone.d.ts +0 -4
- package/dist/settings/FirmPool.d.ts +0 -82
package/dist/calendar/index.d.ts
CHANGED
|
@@ -28,3 +28,7 @@ export { formatReminder, splitReminderMinutes, reminderToMinutes, REMINDER_PRESE
|
|
|
28
28
|
export { ARBI_WEBINAR_LABEL, attendeeKey, isWebinarConference, isAllDayDraft, allDayInclusiveEnd, draftFromSlot, draftRangeUtc, setDraftAllDay, setDraftEnd, setDraftStart, specDate, specTime, validateDraft, type DraftError, } from './draft';
|
|
29
29
|
export { addDays, addMonths, convertWall, detectTimeZone, diffDays, formatInZone, formatPlainDate, isValidTimeZone, listTimeZones, safeZone, startOfWeek, todayInZone, utcToDate, utcToTime, utcToWall, wallToUtc, zoneCity, zoneOffsetLabel, zoneOffsetMinutes, } from './zone';
|
|
30
30
|
export { CALENDAR_COLORS, contrastText } from './colors';
|
|
31
|
+
export { CalendarPrint, type CalendarPrintProps, type PrintCalendarInfo } from './CalendarPrint';
|
|
32
|
+
export { printCalendar } from './printCalendar';
|
|
33
|
+
export { printRange, eventDays, eventsByDay, type CalendarEvent as PrintableCalendarEvent, type PrintView, } from './print-layout';
|
|
34
|
+
export { formatSlotTime, formatDayLabel, groupSlotsByDay, formatSlotRange, zoneOptions, type SlotView, type SlotDay, } from './booking-slots';
|
package/dist/calendar/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { safeZone, isValidTimeZone, utcToDate, addDays, convertWall, utcToTime, zoneOffsetLabel, formatInZone, zoneCity, todayInZone, startOfWeek, formatPlainDate, addMonths, isoWeekNumber, diffDays, utcToWall, listTimeZones, zoneOffsetMinutes, wallToEpochMs, dayOfWeekSun0, detectTimeZone, wallArrayOffset, epochToWallArray, wallToUtc } from '../chunk-GTCC2VAR.js';
|
|
3
|
+
export { addDays, addMonths, convertWall, detectTimeZone, diffDays, formatInZone, formatPlainDate, isValidTimeZone, listTimeZones, safeZone, startOfWeek, todayInZone, utcToDate, utcToTime, utcToWall, wallToUtc, zoneCity, zoneOffsetLabel, zoneOffsetMinutes } from '../chunk-GTCC2VAR.js';
|
|
2
4
|
import '../chunk-VUNV25KB.js';
|
|
3
5
|
import { forwardRef, useMemo, useRef, useState, useCallback, useEffect, useId } from 'react';
|
|
4
6
|
import FullCalendar from '@fullcalendar/react';
|
|
@@ -10,9 +12,11 @@ import multiMonthPlugin from '@fullcalendar/multimonth';
|
|
|
10
12
|
import { ChevronLeft, ChevronRight, Plus, Lightbulb, Workflow, ListTodo, Lock, EllipsisVertical, Globe, ChevronDown, Check, Clock, Repeat, CalendarDays, X, Video, MapPin, Users, TextAlignStart, Bell, Tag, Palette, Paperclip, Trash2, Pencil, CircleCheck, CircleX, DoorOpen, User, Sparkles } from 'lucide-react';
|
|
11
13
|
import { cn, Button, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, Input, Popover, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, Switch, Textarea, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@arbidocs/react/ui';
|
|
12
14
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
13
|
-
import { Temporal } from 'temporal-polyfill';
|
|
14
15
|
import { createPlugin } from '@fullcalendar/core';
|
|
15
16
|
import { NamedTimeZoneImpl } from '@fullcalendar/core/internal';
|
|
17
|
+
import { Temporal } from 'temporal-polyfill';
|
|
18
|
+
import { flushSync } from 'react-dom';
|
|
19
|
+
import { createRoot } from 'react-dom/client';
|
|
16
20
|
|
|
17
21
|
// src/calendar/labels.ts
|
|
18
22
|
var CALENDAR_DEFAULT_LABELS = {
|
|
@@ -305,151 +309,6 @@ function ColorSwatches({
|
|
|
305
309
|
))
|
|
306
310
|
] });
|
|
307
311
|
}
|
|
308
|
-
var pad2 = (n) => String(n).padStart(2, "0");
|
|
309
|
-
var pad4 = (n) => String(n).padStart(4, "0");
|
|
310
|
-
function isValidTimeZone(zone) {
|
|
311
|
-
if (!zone) return false;
|
|
312
|
-
try {
|
|
313
|
-
Temporal.Now.instant().toZonedDateTimeISO(zone);
|
|
314
|
-
return true;
|
|
315
|
-
} catch {
|
|
316
|
-
return false;
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
function safeZone(zone, fallback = "UTC") {
|
|
320
|
-
if (isValidTimeZone(zone)) return zone;
|
|
321
|
-
return isValidTimeZone(fallback) ? fallback : "UTC";
|
|
322
|
-
}
|
|
323
|
-
function toPlainDateTime(wall) {
|
|
324
|
-
return /^\d{4}-\d{2}-\d{2}$/.test(wall) ? Temporal.PlainDate.from(wall).toPlainDateTime() : Temporal.PlainDateTime.from(wall);
|
|
325
|
-
}
|
|
326
|
-
function wallToUtc(wall, zone) {
|
|
327
|
-
const zdt = toPlainDateTime(wall).toZonedDateTime(safeZone(zone), {
|
|
328
|
-
disambiguation: "compatible"
|
|
329
|
-
});
|
|
330
|
-
return zdt.toInstant().toString();
|
|
331
|
-
}
|
|
332
|
-
function wallToEpochMs(wall, zone) {
|
|
333
|
-
return toPlainDateTime(wall).toZonedDateTime(safeZone(zone), { disambiguation: "compatible" }).epochMilliseconds;
|
|
334
|
-
}
|
|
335
|
-
function instantOf(utc) {
|
|
336
|
-
if (typeof utc === "number") return Temporal.Instant.fromEpochMilliseconds(utc);
|
|
337
|
-
if (utc instanceof Date) return Temporal.Instant.fromEpochMilliseconds(utc.getTime());
|
|
338
|
-
return Temporal.Instant.from(utc);
|
|
339
|
-
}
|
|
340
|
-
function zoned(utc, zone) {
|
|
341
|
-
return instantOf(utc).toZonedDateTimeISO(safeZone(zone));
|
|
342
|
-
}
|
|
343
|
-
function utcToWall(utc, zone) {
|
|
344
|
-
const z = zoned(utc, zone);
|
|
345
|
-
return `${pad4(z.year)}-${pad2(z.month)}-${pad2(z.day)}T${pad2(z.hour)}:${pad2(z.minute)}`;
|
|
346
|
-
}
|
|
347
|
-
function utcToDate(utc, zone) {
|
|
348
|
-
const z = zoned(utc, zone);
|
|
349
|
-
return `${pad4(z.year)}-${pad2(z.month)}-${pad2(z.day)}`;
|
|
350
|
-
}
|
|
351
|
-
function utcToTime(utc, zone) {
|
|
352
|
-
const z = zoned(utc, zone);
|
|
353
|
-
return `${pad2(z.hour)}:${pad2(z.minute)}`;
|
|
354
|
-
}
|
|
355
|
-
function convertWall(wall, fromZone, toZone) {
|
|
356
|
-
return utcToWall(wallToUtc(wall, fromZone), toZone);
|
|
357
|
-
}
|
|
358
|
-
function todayInZone(zone, now = Date.now()) {
|
|
359
|
-
return utcToDate(now, zone);
|
|
360
|
-
}
|
|
361
|
-
function addDays(date, days) {
|
|
362
|
-
return Temporal.PlainDate.from(date).add({ days }).toString();
|
|
363
|
-
}
|
|
364
|
-
function addMonths(date, months) {
|
|
365
|
-
return Temporal.PlainDate.from(date).add({ months }).toString();
|
|
366
|
-
}
|
|
367
|
-
function diffDays(a, b) {
|
|
368
|
-
return Temporal.PlainDate.from(a).until(Temporal.PlainDate.from(b), { largestUnit: "days" }).days;
|
|
369
|
-
}
|
|
370
|
-
function dayOfWeekSun0(date) {
|
|
371
|
-
return Temporal.PlainDate.from(date).dayOfWeek % 7;
|
|
372
|
-
}
|
|
373
|
-
function startOfWeek(date, weekStart) {
|
|
374
|
-
const back = (dayOfWeekSun0(date) - weekStart + 7) % 7;
|
|
375
|
-
return addDays(date, -back);
|
|
376
|
-
}
|
|
377
|
-
function isoWeekNumber(date) {
|
|
378
|
-
return Temporal.PlainDate.from(date).weekOfYear ?? 1;
|
|
379
|
-
}
|
|
380
|
-
function zoneOffsetMinutes(zone, at = Date.now()) {
|
|
381
|
-
return Math.round(zoned(at, zone).offsetNanoseconds / 6e10);
|
|
382
|
-
}
|
|
383
|
-
function zoneOffsetLabel(zone, at = Date.now()) {
|
|
384
|
-
const total = zoneOffsetMinutes(zone, at);
|
|
385
|
-
if (total === 0) return "GMT";
|
|
386
|
-
const sign = total > 0 ? "+" : "-";
|
|
387
|
-
const abs = Math.abs(total);
|
|
388
|
-
const h = Math.floor(abs / 60);
|
|
389
|
-
const m = abs % 60;
|
|
390
|
-
return `GMT${sign}${h}${m ? `:${pad2(m)}` : ""}`;
|
|
391
|
-
}
|
|
392
|
-
function zoneCity(zone) {
|
|
393
|
-
const last = zone.split("/").pop() ?? zone;
|
|
394
|
-
return last.replace(/_/g, " ");
|
|
395
|
-
}
|
|
396
|
-
function listTimeZones() {
|
|
397
|
-
try {
|
|
398
|
-
const fn = Intl.supportedValuesOf;
|
|
399
|
-
const zones = fn ? fn("timeZone") : [];
|
|
400
|
-
if (zones.length) return zones.includes("UTC") ? zones : ["UTC", ...zones];
|
|
401
|
-
} catch {
|
|
402
|
-
}
|
|
403
|
-
return [
|
|
404
|
-
"UTC",
|
|
405
|
-
"Europe/London",
|
|
406
|
-
"Europe/Paris",
|
|
407
|
-
"Europe/Berlin",
|
|
408
|
-
"America/New_York",
|
|
409
|
-
"America/Chicago",
|
|
410
|
-
"America/Denver",
|
|
411
|
-
"America/Los_Angeles",
|
|
412
|
-
"Asia/Tokyo",
|
|
413
|
-
"Asia/Singapore",
|
|
414
|
-
"Australia/Sydney"
|
|
415
|
-
];
|
|
416
|
-
}
|
|
417
|
-
function detectTimeZone() {
|
|
418
|
-
try {
|
|
419
|
-
return Intl.DateTimeFormat().resolvedOptions().timeZone || "UTC";
|
|
420
|
-
} catch {
|
|
421
|
-
return "UTC";
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
function formatInZone(utc, zone, options, locale) {
|
|
425
|
-
const ms = instantOf(utc).epochMilliseconds;
|
|
426
|
-
return new Intl.DateTimeFormat(locale, { ...options, timeZone: safeZone(zone) }).format(ms);
|
|
427
|
-
}
|
|
428
|
-
function formatPlainDate(date, options, locale) {
|
|
429
|
-
return new Intl.DateTimeFormat(locale, { ...options, timeZone: "UTC" }).format(
|
|
430
|
-
Date.parse(`${date}T12:00:00Z`)
|
|
431
|
-
);
|
|
432
|
-
}
|
|
433
|
-
function epochToWallArray(ms, zone) {
|
|
434
|
-
const z = Temporal.Instant.fromEpochMilliseconds(ms).toZonedDateTimeISO(zone);
|
|
435
|
-
return [z.year, z.month - 1, z.day, z.hour, z.minute, z.second, z.millisecond];
|
|
436
|
-
}
|
|
437
|
-
function wallArrayOffset(a, zone) {
|
|
438
|
-
const norm = new Date(
|
|
439
|
-
Date.UTC(a[0], a[1] ?? 0, a[2] ?? 1, a[3] ?? 0, a[4] ?? 0, a[5] ?? 0, a[6] ?? 0)
|
|
440
|
-
);
|
|
441
|
-
const pdt = new Temporal.PlainDateTime(
|
|
442
|
-
norm.getUTCFullYear(),
|
|
443
|
-
norm.getUTCMonth() + 1,
|
|
444
|
-
norm.getUTCDate(),
|
|
445
|
-
norm.getUTCHours(),
|
|
446
|
-
norm.getUTCMinutes(),
|
|
447
|
-
norm.getUTCSeconds(),
|
|
448
|
-
norm.getUTCMilliseconds()
|
|
449
|
-
);
|
|
450
|
-
const zdt = pdt.toZonedDateTime(zone, { disambiguation: "compatible" });
|
|
451
|
-
return Math.round(zdt.offsetNanoseconds / 6e10);
|
|
452
|
-
}
|
|
453
312
|
var temporalZonePlugin = null;
|
|
454
313
|
function getTemporalTimeZonePlugin() {
|
|
455
314
|
if (!temporalZonePlugin) {
|
|
@@ -3501,10 +3360,10 @@ function ScopeDialog({
|
|
|
3501
3360
|
}
|
|
3502
3361
|
|
|
3503
3362
|
// src/calendar/scheduling.ts
|
|
3504
|
-
var
|
|
3363
|
+
var pad2 = (n) => String(n).padStart(2, "0");
|
|
3505
3364
|
function dayWindow(date, zone, startHour = 7, endHour = 20) {
|
|
3506
|
-
const startMs = wallToEpochMs(`${date}T${
|
|
3507
|
-
const endMs = endHour >= 24 ? wallToEpochMs(`${date}T23:59`, zone) + 6e4 : wallToEpochMs(`${date}T${
|
|
3365
|
+
const startMs = wallToEpochMs(`${date}T${pad2(startHour)}:00`, zone);
|
|
3366
|
+
const endMs = endHour >= 24 ? wallToEpochMs(`${date}T23:59`, zone) + 6e4 : wallToEpochMs(`${date}T${pad2(endHour)}:00`, zone);
|
|
3508
3367
|
return { startMs, endMs };
|
|
3509
3368
|
}
|
|
3510
3369
|
function placeIntervals(intervals, win) {
|
|
@@ -3549,7 +3408,7 @@ function hourTicks(date, zone, startHour, endHour) {
|
|
|
3549
3408
|
const span = win.endMs - win.startMs;
|
|
3550
3409
|
const ticks = [];
|
|
3551
3410
|
for (let h = startHour; h < endHour; h++) {
|
|
3552
|
-
const ms = wallToEpochMs(`${date}T${
|
|
3411
|
+
const ms = wallToEpochMs(`${date}T${pad2(h)}:00`, zone);
|
|
3553
3412
|
ticks.push({ hour: h, leftPct: (ms - win.startMs) / span * 100 });
|
|
3554
3413
|
}
|
|
3555
3414
|
return ticks;
|
|
@@ -4096,6 +3955,278 @@ function CalendarSettingsForm({
|
|
|
4096
3955
|
);
|
|
4097
3956
|
}
|
|
4098
3957
|
|
|
4099
|
-
|
|
3958
|
+
// src/calendar/print-layout.ts
|
|
3959
|
+
function printRange(view, date, weekStart = 1, agendaDays = 30) {
|
|
3960
|
+
if (view === "day") return { from: date, to: addDays(date, 1) };
|
|
3961
|
+
if (view === "agenda") return { from: date, to: addDays(date, agendaDays) };
|
|
3962
|
+
if (view === "week") {
|
|
3963
|
+
const from2 = startOfWeek(date, weekStart);
|
|
3964
|
+
return { from: from2, to: addDays(from2, 7) };
|
|
3965
|
+
}
|
|
3966
|
+
const first = `${date.slice(0, 8)}01`;
|
|
3967
|
+
const from = startOfWeek(first, weekStart);
|
|
3968
|
+
const nextMonth = addMonths(first, 1);
|
|
3969
|
+
const lead = (dayOfWeekSun0(nextMonth) - weekStart + 7) % 7;
|
|
3970
|
+
const to = lead === 0 ? nextMonth : addDays(nextMonth, 7 - lead);
|
|
3971
|
+
return { from, to };
|
|
3972
|
+
}
|
|
3973
|
+
function eachDay(from, to) {
|
|
3974
|
+
const out = [];
|
|
3975
|
+
for (let d = from; d < to; d = addDays(d, 1)) out.push(d);
|
|
3976
|
+
return out;
|
|
3977
|
+
}
|
|
3978
|
+
function eventDays(e, zone) {
|
|
3979
|
+
if (e.all_day) {
|
|
3980
|
+
const start = e.start.date ?? utcToDate(e.start_utc, "UTC");
|
|
3981
|
+
const endExcl = e.end.date ?? addDays(start, 1);
|
|
3982
|
+
return eachDay(start, endExcl > start ? endExcl : addDays(start, 1));
|
|
3983
|
+
}
|
|
3984
|
+
const startDay = utcToDate(e.start_utc, zone);
|
|
3985
|
+
const lastInstant = new Date(
|
|
3986
|
+
Math.max(new Date(e.start_utc).getTime(), new Date(e.end_utc).getTime() - 1)
|
|
3987
|
+
);
|
|
3988
|
+
const endDay = utcToDate(lastInstant, zone);
|
|
3989
|
+
return eachDay(startDay, addDays(endDay, 1));
|
|
3990
|
+
}
|
|
3991
|
+
function timeLabel(e, day, zone) {
|
|
3992
|
+
if (e.all_day) return "All day";
|
|
3993
|
+
const fmt = new Intl.DateTimeFormat(void 0, {
|
|
3994
|
+
timeZone: zone,
|
|
3995
|
+
hour: "numeric",
|
|
3996
|
+
minute: "2-digit"
|
|
3997
|
+
});
|
|
3998
|
+
const sDay = utcToDate(e.start_utc, zone);
|
|
3999
|
+
const eDay = utcToDate(new Date(new Date(e.end_utc).getTime() - 1), zone);
|
|
4000
|
+
const s = sDay === day ? fmt.format(new Date(e.start_utc)) : "\u2026";
|
|
4001
|
+
const en = eDay === day ? fmt.format(new Date(e.end_utc)) : "\u2026";
|
|
4002
|
+
return `${s} \u2013 ${en}`;
|
|
4003
|
+
}
|
|
4004
|
+
function eventsByDay(events, zone, from, to) {
|
|
4005
|
+
const map = /* @__PURE__ */ new Map();
|
|
4006
|
+
for (const e of events) {
|
|
4007
|
+
for (const d of eventDays(e, zone)) {
|
|
4008
|
+
if (d < from || d >= to) continue;
|
|
4009
|
+
const list = map.get(d) ?? [];
|
|
4010
|
+
list.push(e);
|
|
4011
|
+
map.set(d, list);
|
|
4012
|
+
}
|
|
4013
|
+
}
|
|
4014
|
+
for (const list of map.values())
|
|
4015
|
+
list.sort(
|
|
4016
|
+
(a, b) => Number(b.all_day) - Number(a.all_day) || new Date(a.start_utc).getTime() - new Date(b.start_utc).getTime() || a.title.localeCompare(b.title)
|
|
4017
|
+
);
|
|
4018
|
+
return map;
|
|
4019
|
+
}
|
|
4020
|
+
function heading(view, date, from, to) {
|
|
4021
|
+
const last = addDays(to, -1);
|
|
4022
|
+
if (view === "day")
|
|
4023
|
+
return formatPlainDate(from, {
|
|
4024
|
+
weekday: "long",
|
|
4025
|
+
year: "numeric",
|
|
4026
|
+
month: "long",
|
|
4027
|
+
day: "numeric"
|
|
4028
|
+
});
|
|
4029
|
+
if (view === "month")
|
|
4030
|
+
return formatPlainDate(`${date.slice(0, 7)}-15`, { year: "numeric", month: "long" });
|
|
4031
|
+
const opts = { year: "numeric", month: "short", day: "numeric" };
|
|
4032
|
+
return `${formatPlainDate(from, opts)} \u2013 ${formatPlainDate(last, opts)}`;
|
|
4033
|
+
}
|
|
4034
|
+
var STYLE = `
|
|
4035
|
+
.arbi-calendar-print { color: #111; background: #fff; font: 12px/1.4 system-ui, -apple-system, 'Segoe UI', sans-serif; }
|
|
4036
|
+
.arbi-calendar-print h1 { font-size: 18px; margin: 0 0 8px; }
|
|
4037
|
+
.arbi-calendar-print .acp-zone { color: #555; font-size: 11px; margin-bottom: 12px; }
|
|
4038
|
+
.arbi-calendar-print table { border-collapse: collapse; width: 100%; table-layout: fixed; }
|
|
4039
|
+
.arbi-calendar-print th, .arbi-calendar-print td { border: 1px solid #bbb; padding: 4px; vertical-align: top; text-align: left; }
|
|
4040
|
+
.arbi-calendar-print th { background: #f3f3f3; font-weight: 600; }
|
|
4041
|
+
.arbi-calendar-print .acp-day { break-inside: avoid; margin-bottom: 10px; }
|
|
4042
|
+
.arbi-calendar-print .acp-day h2 { font-size: 13px; margin: 0 0 4px; border-bottom: 1px solid #bbb; padding-bottom: 2px; }
|
|
4043
|
+
.arbi-calendar-print .acp-ev { display: flex; gap: 6px; margin: 2px 0; break-inside: avoid; }
|
|
4044
|
+
.arbi-calendar-print .acp-time { flex: 0 0 auto; min-width: 92px; color: #333; font-variant-numeric: tabular-nums; }
|
|
4045
|
+
.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; }
|
|
4046
|
+
.arbi-calendar-print .acp-meta { color: #555; font-size: 11px; white-space: pre-line; }
|
|
4047
|
+
.arbi-calendar-print .acp-muted { color: #888; }
|
|
4048
|
+
.arbi-calendar-print .acp-cancelled { text-decoration: line-through; color: #888; }
|
|
4049
|
+
.arbi-calendar-print .acp-month td { height: 90px; }
|
|
4050
|
+
.arbi-calendar-print .acp-month .acp-out { color: #aaa; }
|
|
4051
|
+
.arbi-calendar-print .acp-cell-ev { font-size: 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
4052
|
+
@media screen { .arbi-calendar-print[data-screen-hidden='true'] { display: none; } }
|
|
4053
|
+
@media print {
|
|
4054
|
+
@page { margin: 12mm; }
|
|
4055
|
+
body.arbi-printing-calendar > *:not(.arbi-calendar-print-host) { display: none !important; }
|
|
4056
|
+
body.arbi-printing-calendar .arbi-calendar-print-host { display: block !important; }
|
|
4057
|
+
body.arbi-printing-calendar .arbi-calendar-print { display: block !important; }
|
|
4058
|
+
}
|
|
4059
|
+
`;
|
|
4060
|
+
function CalendarPrint({
|
|
4061
|
+
events,
|
|
4062
|
+
view,
|
|
4063
|
+
date,
|
|
4064
|
+
timeZone,
|
|
4065
|
+
weekStart = 1,
|
|
4066
|
+
agendaDays = 30,
|
|
4067
|
+
title,
|
|
4068
|
+
calendars,
|
|
4069
|
+
screenHidden = false,
|
|
4070
|
+
showDetails = true
|
|
4071
|
+
}) {
|
|
4072
|
+
const zone = safeZone(timeZone, detectTimeZone());
|
|
4073
|
+
const { from, to } = printRange(view, date, weekStart, agendaDays);
|
|
4074
|
+
const byDay = eventsByDay(events, zone, from, to);
|
|
4075
|
+
const color = (e) => e.color || calendars?.find((c) => c.id === e.calendar_id)?.color || "#3b82f6";
|
|
4076
|
+
const label = (e) => e.restricted && !e.title ? "Busy" : e.title || "(no title)";
|
|
4077
|
+
const evLine = (e, day, details) => /* @__PURE__ */ jsxs("div", { className: "acp-ev", "data-testid": "calendar-print-event", children: [
|
|
4078
|
+
/* @__PURE__ */ jsx("span", { className: "acp-time", children: timeLabel(e, day, zone) }),
|
|
4079
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
4080
|
+
/* @__PURE__ */ jsx("span", { className: "acp-dot", style: { background: color(e) } }),
|
|
4081
|
+
/* @__PURE__ */ jsx("span", { className: e.status === "cancelled" ? "acp-cancelled" : void 0, children: label(e) }),
|
|
4082
|
+
details && e.location && /* @__PURE__ */ jsx("div", { className: "acp-meta", children: e.location }),
|
|
4083
|
+
details && e.description && /* @__PURE__ */ jsx("div", { className: "acp-meta", children: e.description.slice(0, 500) })
|
|
4084
|
+
] })
|
|
4085
|
+
] }, `${e.instance_id}-${day}`);
|
|
4086
|
+
let body;
|
|
4087
|
+
if (view === "agenda" || view === "day") {
|
|
4088
|
+
const days = view === "day" ? [from] : eachDay(from, to).filter((d) => byDay.has(d));
|
|
4089
|
+
body = days.length ? days.map((d) => /* @__PURE__ */ jsxs("section", { className: "acp-day", children: [
|
|
4090
|
+
/* @__PURE__ */ jsx("h2", { children: formatPlainDate(d, { weekday: "long", month: "long", day: "numeric" }) }),
|
|
4091
|
+
(byDay.get(d) ?? []).map((e) => evLine(e, d, showDetails)),
|
|
4092
|
+
!byDay.get(d)?.length && /* @__PURE__ */ jsx("div", { className: "acp-muted", children: "No events" })
|
|
4093
|
+
] }, d)) : /* @__PURE__ */ jsx("p", { className: "acp-muted", children: "No events" });
|
|
4094
|
+
} else if (view === "week") {
|
|
4095
|
+
const days = eachDay(from, to);
|
|
4096
|
+
body = /* @__PURE__ */ jsxs("table", { children: [
|
|
4097
|
+
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { children: days.map((d) => /* @__PURE__ */ jsx("th", { children: formatPlainDate(d, { weekday: "short", day: "numeric", month: "short" }) }, d)) }) }),
|
|
4098
|
+
/* @__PURE__ */ jsx("tbody", { children: /* @__PURE__ */ jsx("tr", { children: days.map((d) => /* @__PURE__ */ jsx("td", { style: { height: 480 }, children: (byDay.get(d) ?? []).map((e) => evLine(e, d, false)) }, d)) }) })
|
|
4099
|
+
] });
|
|
4100
|
+
} else {
|
|
4101
|
+
const days = eachDay(from, to);
|
|
4102
|
+
const weeks = [];
|
|
4103
|
+
for (let i = 0; i < days.length; i += 7) weeks.push(days.slice(i, i + 7));
|
|
4104
|
+
const month = date.slice(0, 7);
|
|
4105
|
+
body = /* @__PURE__ */ jsxs("table", { className: "acp-month", children: [
|
|
4106
|
+
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { children: weeks[0].map((d) => /* @__PURE__ */ jsx("th", { children: formatPlainDate(d, { weekday: "short" }) }, d)) }) }),
|
|
4107
|
+
/* @__PURE__ */ jsx("tbody", { children: weeks.map((w) => /* @__PURE__ */ jsx("tr", { children: w.map((d) => /* @__PURE__ */ jsxs("td", { className: d.slice(0, 7) === month ? void 0 : "acp-out", children: [
|
|
4108
|
+
/* @__PURE__ */ jsx("div", { children: Number(d.slice(8)) }),
|
|
4109
|
+
(byDay.get(d) ?? []).slice(0, 6).map((e) => /* @__PURE__ */ jsxs(
|
|
4110
|
+
"div",
|
|
4111
|
+
{
|
|
4112
|
+
className: "acp-cell-ev",
|
|
4113
|
+
"data-testid": "calendar-print-event",
|
|
4114
|
+
children: [
|
|
4115
|
+
/* @__PURE__ */ jsx("span", { className: "acp-dot", style: { background: color(e) } }),
|
|
4116
|
+
!e.all_day && `${timeLabel(e, d, zone).split(" \u2013 ")[0]} `,
|
|
4117
|
+
label(e)
|
|
4118
|
+
]
|
|
4119
|
+
},
|
|
4120
|
+
`${e.instance_id}-${d}`
|
|
4121
|
+
)),
|
|
4122
|
+
(byDay.get(d)?.length ?? 0) > 6 && /* @__PURE__ */ jsxs("div", { className: "acp-cell-ev acp-muted", children: [
|
|
4123
|
+
"+",
|
|
4124
|
+
(byDay.get(d)?.length ?? 0) - 6,
|
|
4125
|
+
" more"
|
|
4126
|
+
] })
|
|
4127
|
+
] }, d)) }, w[0])) })
|
|
4128
|
+
] });
|
|
4129
|
+
}
|
|
4130
|
+
return /* @__PURE__ */ jsxs(
|
|
4131
|
+
"div",
|
|
4132
|
+
{
|
|
4133
|
+
className: "arbi-calendar-print",
|
|
4134
|
+
"data-screen-hidden": screenHidden ? "true" : "false",
|
|
4135
|
+
"data-testid": "calendar-print",
|
|
4136
|
+
children: [
|
|
4137
|
+
/* @__PURE__ */ jsx("style", { children: STYLE }),
|
|
4138
|
+
/* @__PURE__ */ jsx("h1", { children: title ?? heading(view, date, from, to) }),
|
|
4139
|
+
/* @__PURE__ */ jsxs("div", { className: "acp-zone", children: [
|
|
4140
|
+
"Times in ",
|
|
4141
|
+
zone.replace(/_/g, " ")
|
|
4142
|
+
] }),
|
|
4143
|
+
body
|
|
4144
|
+
]
|
|
4145
|
+
}
|
|
4146
|
+
);
|
|
4147
|
+
}
|
|
4148
|
+
function printCalendar(props) {
|
|
4149
|
+
const host = document.createElement("div");
|
|
4150
|
+
host.className = "arbi-calendar-print-host";
|
|
4151
|
+
host.style.display = "none";
|
|
4152
|
+
document.body.appendChild(host);
|
|
4153
|
+
let unmount = null;
|
|
4154
|
+
if (props) {
|
|
4155
|
+
const root = createRoot(host);
|
|
4156
|
+
flushSync(() => root.render(/* @__PURE__ */ jsx(CalendarPrint, { ...props, screenHidden: false })));
|
|
4157
|
+
unmount = () => root.unmount();
|
|
4158
|
+
} else {
|
|
4159
|
+
const existing = document.querySelector(".arbi-calendar-print");
|
|
4160
|
+
if (!existing) {
|
|
4161
|
+
host.remove();
|
|
4162
|
+
return;
|
|
4163
|
+
}
|
|
4164
|
+
const clone = existing.cloneNode(true);
|
|
4165
|
+
clone.setAttribute("data-screen-hidden", "false");
|
|
4166
|
+
host.appendChild(clone);
|
|
4167
|
+
}
|
|
4168
|
+
document.body.classList.add("arbi-printing-calendar");
|
|
4169
|
+
let done = false;
|
|
4170
|
+
const cleanup = () => {
|
|
4171
|
+
if (done) return;
|
|
4172
|
+
done = true;
|
|
4173
|
+
window.removeEventListener("afterprint", cleanup);
|
|
4174
|
+
document.body.classList.remove("arbi-printing-calendar");
|
|
4175
|
+
unmount?.();
|
|
4176
|
+
host.remove();
|
|
4177
|
+
};
|
|
4178
|
+
window.addEventListener("afterprint", cleanup);
|
|
4179
|
+
try {
|
|
4180
|
+
window.print();
|
|
4181
|
+
} finally {
|
|
4182
|
+
if (!("onafterprint" in window)) setTimeout(cleanup, 1e3);
|
|
4183
|
+
}
|
|
4184
|
+
}
|
|
4185
|
+
|
|
4186
|
+
// src/calendar/booking-slots.ts
|
|
4187
|
+
function formatSlotTime(instant, zone, locale) {
|
|
4188
|
+
return formatInZone(instant, zone, { hour: "numeric", minute: "2-digit" }, locale);
|
|
4189
|
+
}
|
|
4190
|
+
function formatDayLabel(date, locale) {
|
|
4191
|
+
return formatPlainDate(date, { weekday: "long", month: "long", day: "numeric" }, locale);
|
|
4192
|
+
}
|
|
4193
|
+
function groupSlotsByDay(slots, zone, locale) {
|
|
4194
|
+
const tz = safeZone(zone, detectTimeZone());
|
|
4195
|
+
const byDay = /* @__PURE__ */ new Map();
|
|
4196
|
+
const sorted = [...slots].sort((a, b) => new Date(a).getTime() - new Date(b).getTime());
|
|
4197
|
+
for (const start of sorted) {
|
|
4198
|
+
const date = utcToDate(start, tz);
|
|
4199
|
+
const list = byDay.get(date) ?? [];
|
|
4200
|
+
list.push({ start, label: formatSlotTime(start, tz, locale) });
|
|
4201
|
+
byDay.set(date, list);
|
|
4202
|
+
}
|
|
4203
|
+
return [...byDay.entries()].map(([date, list]) => ({
|
|
4204
|
+
date,
|
|
4205
|
+
label: formatDayLabel(date, locale),
|
|
4206
|
+
slots: list
|
|
4207
|
+
}));
|
|
4208
|
+
}
|
|
4209
|
+
function formatSlotRange(start, end, zone, locale) {
|
|
4210
|
+
const tz = safeZone(zone, detectTimeZone());
|
|
4211
|
+
const fmt = new Intl.DateTimeFormat(locale, {
|
|
4212
|
+
timeZone: tz,
|
|
4213
|
+
weekday: "long",
|
|
4214
|
+
month: "long",
|
|
4215
|
+
day: "numeric",
|
|
4216
|
+
hour: "numeric",
|
|
4217
|
+
minute: "2-digit"
|
|
4218
|
+
});
|
|
4219
|
+
const s = new Date(start);
|
|
4220
|
+
const e = new Date(end);
|
|
4221
|
+
const range = fmt.formatRange;
|
|
4222
|
+
const text = range ? range.call(fmt, s, e) : `${fmt.format(s)} \u2013 ${formatSlotTime(end, tz, locale)}`;
|
|
4223
|
+
return `${text} (${tz.replace(/_/g, " ")})`;
|
|
4224
|
+
}
|
|
4225
|
+
function zoneOptions(current) {
|
|
4226
|
+
const zones = listTimeZones();
|
|
4227
|
+
return zones.includes(current) ? zones : [current, ...zones];
|
|
4228
|
+
}
|
|
4229
|
+
|
|
4230
|
+
export { ARBI_WEBINAR_LABEL, CALENDAR_COLORS, CALENDAR_DEFAULT_LABELS, CALENDAR_NARROW_WIDTH, CalendarGrid, CalendarList, CalendarPrint, CalendarSettingsForm, DEFAULT_RECURRENCE_DESCRIBE_LABELS, DEFAULT_RECURRENCE_EDITOR_LABELS, DEFAULT_REMINDER_FORMAT_LABELS, EventDetails, EventEditor, MiniMonth, REMINDER_PRESETS, RRULE_WEEKDAYS, RecurrenceEditor, RoomFinder, SchedulingAssistant, ScopeDialog, TimeZonePicker, allDayInclusiveEnd, attendeeKey, buildRRule, contrastText, dayWindow, defaultRecurrenceForm, describeRecurrence, draftFromSlot, draftRangeUtc, effectiveCalendarView, eventDays, eventStateClasses, eventsByDay, formatDayLabel, formatEventWhen, formatReminder, formatSlotRange, formatSlotTime, formatZoneLabel, getTemporalTimeZonePlugin, groupSlotsByDay, hourTicks, isAllDayDraft, isWebinarConference, outsideIntervals, parseRRule, placeIntervals, printCalendar, printRange, reminderToMinutes, setDraftAllDay, setDraftEnd, setDraftStart, setPosOf, specDate, specTime, splitReminderMinutes, toBusinessHours, validateDraft, weekdayOf, workWeekHiddenDays, zoneOptions };
|
|
4100
4231
|
//# sourceMappingURL=index.js.map
|
|
4101
4232
|
//# sourceMappingURL=index.js.map
|