@linked.cm/calendar 0.1.0

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 (44) hide show
  1. package/LICENSE +12 -0
  2. package/README.md +48 -0
  3. package/THIRD_PARTY_NOTICES.md +12 -0
  4. package/lib/esm/Calendar.d.ts +57 -0
  5. package/lib/esm/Calendar.js +202 -0
  6. package/lib/esm/Calendar.js.map +1 -0
  7. package/lib/esm/Calendar.module.css +912 -0
  8. package/lib/esm/EventPopover.d.ts +17 -0
  9. package/lib/esm/EventPopover.js +104 -0
  10. package/lib/esm/EventPopover.js.map +1 -0
  11. package/lib/esm/ResourceGrid.d.ts +11 -0
  12. package/lib/esm/ResourceGrid.js +36 -0
  13. package/lib/esm/ResourceGrid.js.map +1 -0
  14. package/lib/esm/TimeGrid.d.ts +15 -0
  15. package/lib/esm/TimeGrid.js +276 -0
  16. package/lib/esm/TimeGrid.js.map +1 -0
  17. package/lib/esm/index.d.ts +10 -0
  18. package/lib/esm/index.js +12 -0
  19. package/lib/esm/index.js.map +1 -0
  20. package/lib/esm/package.d.ts +8 -0
  21. package/lib/esm/package.js +10 -0
  22. package/lib/esm/package.js.map +1 -0
  23. package/lib/esm/range.d.ts +3 -0
  24. package/lib/esm/range.js +22 -0
  25. package/lib/esm/range.js.map +1 -0
  26. package/lib/esm/recurrence.d.ts +14 -0
  27. package/lib/esm/recurrence.js +60 -0
  28. package/lib/esm/recurrence.js.map +1 -0
  29. package/lib/esm/refreshBus.d.ts +10 -0
  30. package/lib/esm/refreshBus.js +25 -0
  31. package/lib/esm/refreshBus.js.map +1 -0
  32. package/lib/esm/styles.d.ts +4 -0
  33. package/lib/esm/translations/en.json +49 -0
  34. package/lib/esm/translations.d.ts +56 -0
  35. package/lib/esm/translations.js +44 -0
  36. package/lib/esm/translations.js.map +1 -0
  37. package/lib/esm/types.d.ts +97 -0
  38. package/lib/esm/types.js +11 -0
  39. package/lib/esm/types.js.map +1 -0
  40. package/lib/esm/tz.d.ts +30 -0
  41. package/lib/esm/tz.js +78 -0
  42. package/lib/esm/tz.js.map +1 -0
  43. package/package.json +98 -0
  44. package/src/translations/en.json +49 -0
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import type { CalEventData } from './types.js';
3
+ import type { CalLabels } from './Calendar.js';
4
+ export declare const EventPopover: React.FC<{
5
+ event: CalEventData;
6
+ x: number;
7
+ y: number;
8
+ tz?: string;
9
+ labels: CalLabels;
10
+ onClose: () => void;
11
+ onExpand: (e: CalEventData) => void;
12
+ onCheckIn?: (e: CalEventData) => void;
13
+ /** Save a manual time edit (start/end). When omitted, the time is read-only. */
14
+ onReschedule?: (e: CalEventData, start: Date, end: Date) => void;
15
+ /** host-supplied extra content (Serve: a compact coverage summary for this item) */
16
+ extra?: React.ReactNode;
17
+ }>;
@@ -0,0 +1,104 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { formatTime, formatTimeZone, isCrossTz, inputValue, instantFromInput, dayKeyTz } from './tz.js';
4
+ import { Button } from '@_linked/primitives/components/Button';
5
+ import { Heading } from '@_linked/primitives/components/Heading';
6
+ import { IconButton } from '@_linked/primitives/components/IconButton';
7
+ import { Input } from '@_linked/primitives/components/Input';
8
+ import { Label } from '@_linked/primitives/components/Label';
9
+ import style from './Calendar.module.css';
10
+ // EventPopover — the single-click quick card (generic; → @_linked/calendar). Quick actions adapt to the
11
+ // item: Directions (physical location), Join (virtual link), Share, Check in (volunteer shifts that
12
+ // haven't ended), and Expand → the full detail. The host can inject an `extra` slot (Serve drops a
13
+ // coverage peek there). Anchored near the click; a backdrop closes it.
14
+ const W = 288;
15
+ const H = 300;
16
+ export const EventPopover = ({ event: e, x, y, tz, labels, onClose, onExpand, onCheckIn, onReschedule, extra }) => {
17
+ var _a, _b, _c, _d;
18
+ const dialogRef = React.useRef(null);
19
+ const closeRef = React.useRef(null);
20
+ const editRef = React.useRef(null);
21
+ const startInputRef = React.useRef(null);
22
+ const titleId = React.useId();
23
+ const cross = isCrossTz(e.start, e.tz, tz);
24
+ // check-in relevance is host-computed per the viewer's privileges (a check-in POSITION, or an attendee
25
+ // day-of) — see serve-calendar-visibility. The engine honours `meta.canCheckIn` when the host sets it,
26
+ // and falls back to a sensible default (volunteer shift, day-of) for standalone use.
27
+ const isVolunteerShift = e.kind === 'mission' || ((_a = e.meta) === null || _a === void 0 ? void 0 : _a.eventType) === 'volunteer';
28
+ const nowMs = Date.now();
29
+ const now = new Date(nowMs);
30
+ const live = nowMs >= e.start.getTime() && nowMs <= e.end.getTime();
31
+ const dayOf = (dayKeyTz(now, tz) >= dayKeyTz(e.start, tz) && nowMs <= e.end.getTime()) || live;
32
+ const hostCanCheckIn = (_b = e.meta) === null || _b === void 0 ? void 0 : _b.canCheckIn;
33
+ const showCheckIn = !!onCheckIn && (hostCanCheckIn !== undefined ? hostCanCheckIn : isVolunteerShift && dayOf);
34
+ const [editing, setEditing] = React.useState(false);
35
+ const [sVal, setSVal] = React.useState(() => inputValue(e.start, tz));
36
+ const [eVal, setEVal] = React.useState(() => inputValue(e.end, tz));
37
+ React.useEffect(() => {
38
+ var _a;
39
+ (_a = closeRef.current) === null || _a === void 0 ? void 0 : _a.focus();
40
+ }, []);
41
+ React.useEffect(() => {
42
+ var _a;
43
+ if (editing)
44
+ (_a = startInputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
45
+ }, [editing]);
46
+ const cancelEditing = () => {
47
+ setSVal(inputValue(e.start, tz));
48
+ setEVal(inputValue(e.end, tz));
49
+ setEditing(false);
50
+ if (typeof window !== 'undefined' && typeof window.requestAnimationFrame === 'function') {
51
+ window.requestAnimationFrame(() => { var _a; return (_a = editRef.current) === null || _a === void 0 ? void 0 : _a.focus(); });
52
+ }
53
+ };
54
+ const onDialogKeyDown = (event) => {
55
+ var _a, _b, _c;
56
+ if (event.key === 'Escape') {
57
+ event.preventDefault();
58
+ onClose();
59
+ return;
60
+ }
61
+ if (event.key !== 'Tab')
62
+ return;
63
+ const focusable = Array.from((_b = (_a = dialogRef.current) === null || _a === void 0 ? void 0 : _a.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])')) !== null && _b !== void 0 ? _b : []);
64
+ if (!focusable.length) {
65
+ event.preventDefault();
66
+ (_c = dialogRef.current) === null || _c === void 0 ? void 0 : _c.focus();
67
+ return;
68
+ }
69
+ const first = focusable[0];
70
+ const last = focusable[focusable.length - 1];
71
+ if (event.shiftKey && document.activeElement === first) {
72
+ event.preventDefault();
73
+ last.focus();
74
+ }
75
+ else if (!event.shiftKey && document.activeElement === last) {
76
+ event.preventDefault();
77
+ first.focus();
78
+ }
79
+ };
80
+ const saveTime = () => {
81
+ const s = instantFromInput(sVal, tz);
82
+ const en = instantFromInput(eVal, tz);
83
+ if (s && en && en.getTime() > s.getTime()) {
84
+ onReschedule === null || onReschedule === void 0 ? void 0 : onReschedule(e, s, en);
85
+ onClose();
86
+ }
87
+ };
88
+ const vw = typeof window !== 'undefined' ? window.innerWidth : 1024;
89
+ const vh = typeof window !== 'undefined' ? window.innerHeight : 768;
90
+ const left = Math.min(Math.max(8, x), vw - W - 8);
91
+ const top = Math.min(Math.max(8, y), vh - H - 8);
92
+ const directions = e.location ? `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(e.location)}` : null;
93
+ const share = () => {
94
+ var _a, _b;
95
+ const text = `${e.title} — ${e.start.toLocaleString()}`;
96
+ if (typeof navigator !== 'undefined' && navigator.share)
97
+ navigator.share({ title: String(e.title), text }).catch(() => { });
98
+ else
99
+ (_b = (_a = navigator === null || navigator === void 0 ? void 0 : navigator.clipboard) === null || _a === void 0 ? void 0 : _a.writeText) === null || _b === void 0 ? void 0 : _b.call(_a, text).catch(() => { });
100
+ onClose();
101
+ };
102
+ return (_jsxs(_Fragment, { children: [_jsx(Button, { type: "button", variant: "ghost", className: style.popBackdrop, onClick: onClose, tabIndex: -1, "aria-hidden": "true" }), _jsxs("div", { ref: dialogRef, className: style.pop, style: { left, top, width: W }, role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: onDialogKeyDown, children: [_jsxs("div", { className: style.popHead, children: [_jsx("span", { className: style.popDot, style: { background: (_c = e.color) !== null && _c !== void 0 ? _c : 'var(--control-accent)' } }), _jsx(Heading, { as: "h3", className: style.popTitle, id: titleId, children: e.title }), _jsx(IconButton, { ref: closeRef, type: "button", variant: "ghost", size: "small", className: style.popClose, "aria-label": labels.close, onClick: onClose, children: "\u00D7" })] }), _jsxs("div", { className: style.popMeta, children: [editing ? (_jsxs("div", { className: style.popEdit, children: [_jsxs(Label, { className: style.popField, children: [_jsx("span", { children: labels.start }), _jsx(Input, { ref: startInputRef, type: "datetime-local", size: "small", className: style.popInput, value: sVal, onChange: (ev) => setSVal(ev.target.value) })] }), _jsxs(Label, { className: style.popField, children: [_jsx("span", { children: labels.end }), _jsx(Input, { type: "datetime-local", size: "small", className: style.popInput, value: eVal, onChange: (ev) => setEVal(ev.target.value) })] }), _jsxs("div", { className: style.popEditRow, children: [_jsx(Button, { type: "button", size: "small", className: style.popSave, onClick: saveTime, children: labels.save }), _jsx(Button, { type: "button", variant: "outline", size: "small", className: style.popEditCancel, onClick: cancelEditing, children: labels.cancel })] })] })) : (_jsxs("div", { className: style.popTimeRow, children: [_jsx("span", { children: e.allDay ? labels.allDay : `${formatTime(e.start, tz)} – ${formatTime(e.end, tz)}` }), onReschedule && !e.allDay && (_jsx(Button, { ref: editRef, type: "button", variant: "ghost", size: "small", className: style.popEditBtn, onClick: () => setEditing(true), children: labels.edit }))] })), cross && !e.allDay && _jsx("div", { className: style.popCross, children: labels.eventLocalTime(formatTimeZone(e.start, e.tz)) }), e.location && _jsx("div", { className: style.popLoc, children: e.location })] }), extra && _jsx("div", { className: style.popExtra, children: extra }), _jsxs("div", { className: style.popActions, children: [directions && (_jsx(Button, { asChild: true, variant: "outline", size: "small", className: style.popAction, children: _jsx("a", { href: directions, target: "_blank", rel: "noreferrer", onClick: onClose, children: labels.directions }) })), e.virtualUrl && (_jsx(Button, { asChild: true, variant: "outline", size: "small", className: style.popAction, children: _jsx("a", { href: e.virtualUrl, target: "_blank", rel: "noreferrer", onClick: onClose, children: labels.join }) })), _jsx(Button, { type: "button", variant: "outline", size: "small", className: style.popAction, onClick: share, children: labels.share }), showCheckIn && (_jsx(Button, { type: "button", variant: "outline", size: "small", className: style.popAction, onClick: () => { onCheckIn(e); onClose(); }, children: labels.checkIn }))] }), ((_d = e.meta) === null || _d === void 0 ? void 0 : _d.expandable) !== false && (_jsx(Button, { type: "button", size: "small", className: style.popExpand, onClick: () => { onExpand(e); onClose(); }, children: labels.expand }))] })] }));
103
+ };
104
+ //# sourceMappingURL=EventPopover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventPopover.js","sourceRoot":"","sources":["../../src/EventPopover.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import type { CalEventData, CalEventSelect, CalResource } from './types.js';
3
+ import type { CalLabels } from './Calendar.js';
4
+ export declare const ResourceGrid: React.FC<{
5
+ cursor: Date;
6
+ events: readonly CalEventData[];
7
+ resources: readonly CalResource[];
8
+ labels: CalLabels;
9
+ tz?: string;
10
+ onSelect?: CalEventSelect;
11
+ }>;
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button } from '@_linked/primitives/components/Button';
3
+ import { Heading } from '@_linked/primitives/components/Heading';
4
+ import { formatTime, instantFromZoned, isCrossTz } from './tz.js';
5
+ import style from './Calendar.module.css';
6
+ function dayRange(cursor, tz) {
7
+ const start = instantFromZoned(cursor.getFullYear(), cursor.getMonth() + 1, cursor.getDate(), 0, tz);
8
+ const next = new Date(cursor.getFullYear(), cursor.getMonth(), cursor.getDate() + 1);
9
+ const end = instantFromZoned(next.getFullYear(), next.getMonth() + 1, next.getDate(), 0, tz);
10
+ return { start, end };
11
+ }
12
+ export const ResourceGrid = ({ cursor, events, resources, labels, tz, onSelect }) => {
13
+ const range = dayRange(cursor, tz);
14
+ const visible = events
15
+ .filter((event) => event.start < range.end && event.end > range.start)
16
+ .sort((a, b) => a.start.getTime() - b.start.getTime() || a.end.getTime() - b.end.getTime());
17
+ const unassigned = visible.filter((event) => { var _a; return !((_a = event.resourceIds) === null || _a === void 0 ? void 0 : _a.length); });
18
+ const columns = [
19
+ ...resources,
20
+ ...(unassigned.length ? [{ id: '__unassigned__', name: labels.unassigned }] : []),
21
+ ];
22
+ if (!columns.length)
23
+ return _jsx("div", { className: style.empty, role: "status", children: labels.resourceEmpty });
24
+ return (_jsx("div", { className: style.resourceGrid, role: "region", "aria-label": labels.resourceView, children: columns.map((resource) => {
25
+ const items = resource.id === '__unassigned__'
26
+ ? unassigned
27
+ : visible.filter((event) => { var _a; return (_a = event.resourceIds) === null || _a === void 0 ? void 0 : _a.includes(resource.id); });
28
+ const color = 'color' in resource ? resource.color : undefined;
29
+ return (_jsxs("section", { className: style.resourceColumn, style: { ['--resource-color']: color !== null && color !== void 0 ? color : 'var(--control-accent)' }, children: [_jsx(Heading, { as: "h3", className: style.resourceHeading, children: resource.name }), _jsx("div", { className: style.resourceEvents, children: items.length ? items.map((event) => {
30
+ var _a, _b, _c;
31
+ const eventLocal = isCrossTz(event.start, event.tz, tz);
32
+ return (_jsxs(Button, { type: "button", variant: "solid", className: style.resourceEvent, style: { ['--c']: (_a = event.color) !== null && _a !== void 0 ? _a : 'var(--control-accent)', ['--a']: (_c = (_b = event.accent) !== null && _b !== void 0 ? _b : event.color) !== null && _c !== void 0 ? _c : 'var(--resource-color)' }, onClick: (pointer) => onSelect === null || onSelect === void 0 ? void 0 : onSelect(event, pointer.clientX, pointer.clientY, pointer.currentTarget), title: eventLocal ? `${event.title} — ${labels.eventLocalTime(formatTime(event.start, event.tz))}` : event.title, children: [_jsx("span", { className: style.resourceEventAccent }), _jsxs("span", { className: style.resourceEventBody, children: [_jsx("span", { className: style.resourceEventTime, children: event.allDay ? labels.allDay : `${formatTime(event.start, tz)} – ${formatTime(event.end, tz)}` }), _jsx("span", { className: style.resourceEventTitle, children: event.title }), event.location && _jsx("span", { className: style.resourceEventLocation, children: event.location })] }), event.alert && _jsx("span", { className: style.alertDot, "data-tone": event.alert.tone, title: event.alert.label, role: "img", "aria-label": event.alert.label })] }, `${resource.id}:${event.id}`));
33
+ }) : _jsx("div", { className: style.resourceColumnEmpty, children: labels.resourceColumnEmpty }) })] }, resource.id));
34
+ }) }));
35
+ };
36
+ //# sourceMappingURL=ResourceGrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceGrid.js","sourceRoot":"","sources":["../../src/ResourceGrid.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import type { CalEventData, CalEventSelect } from './types.js';
3
+ import type { CalLabels } from './Calendar.js';
4
+ export declare const TimeGrid: React.FC<{
5
+ days: Date[];
6
+ events: CalEventData[];
7
+ tz?: string;
8
+ onSelect?: CalEventSelect;
9
+ onMove?: (e: CalEventData, start: Date, end: Date) => void;
10
+ onCreate?: (start: Date, end: Date) => void;
11
+ /** localized short weekday names (Sun-first); BCP-47 locale for time/weekday formatting. */
12
+ weekdays?: string[];
13
+ locale?: string;
14
+ labels: CalLabels;
15
+ }>;
@@ -0,0 +1,276 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ import { dayKey, dayKeyTz, minutesIntoDay, formatTime, instantFromZoned } from './tz.js';
5
+ import { Button } from '@_linked/primitives/components/Button';
6
+ import style from './Calendar.module.css';
7
+ // TimeGrid — week/day time-grid engine (generic; → @_linked/calendar). Gesture state lives at the GRID
8
+ // level (not per column) so an event can be dragged ACROSS day columns with live preview. Everything is
9
+ // driven by a live "draft" (the working geometry while editing); Confirm commits it (move + resize) via
10
+ // onMove; Cancel reverts. Interactions: tap = select (host shows a popover), hold/click-drag = move
11
+ // (cross-day), drag either edge = resize, drag empty = create.
12
+ const HOUR_H = 48; // px per hour
13
+ const SNAP = 15; // minutes
14
+ const LONG_PRESS = 320; // ms to hold before move (tap = open)
15
+ const MOVE_TOL = 8; // px before a press becomes a drag
16
+ const DAY_MS = 86400000;
17
+ const snap = (m) => Math.round(m / SNAP) * SNAP;
18
+ const clampMin = (m) => Math.max(0, Math.min(24 * 60, m));
19
+ const dayKeyLocal = (d) => dayKey(d.getFullYear(), d.getMonth() + 1, d.getDate());
20
+ const WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
21
+ // greedy overlap-lane assignment within one day's items (segments) — generic so it preserves extra fields
22
+ function layout(items) {
23
+ const sorted = [...items].sort((a, b) => a.start.getTime() - b.start.getTime() || b.end.getTime() - a.end.getTime());
24
+ const out = [];
25
+ let cluster = [];
26
+ let clusterEnd = 0;
27
+ const flush = () => {
28
+ if (!cluster.length)
29
+ return;
30
+ const laneEnds = [];
31
+ const assign = new Map();
32
+ for (const it of cluster) {
33
+ let placed = laneEnds.findIndex((end) => it.start.getTime() >= end);
34
+ if (placed === -1) {
35
+ placed = laneEnds.length;
36
+ laneEnds.push(0);
37
+ }
38
+ laneEnds[placed] = it.end.getTime();
39
+ assign.set(it.e.id, placed);
40
+ }
41
+ const lanes = laneEnds.length;
42
+ for (const it of cluster)
43
+ out.push({ ...it, lane: assign.get(it.e.id), lanes });
44
+ cluster = [];
45
+ };
46
+ for (const it of sorted) {
47
+ if (cluster.length && it.start.getTime() >= clusterEnd)
48
+ flush();
49
+ cluster.push(it);
50
+ clusterEnd = Math.max(clusterEnd, it.end.getTime());
51
+ }
52
+ flush();
53
+ return out;
54
+ }
55
+ export const TimeGrid = ({ days, events, tz, onSelect, onMove, onCreate, weekdays = WEEKDAYS, locale = 'en-US', labels }) => {
56
+ const colsRef = React.useRef(null);
57
+ const N = days.length;
58
+ const dayKeys = React.useMemo(() => days.map(dayKeyLocal), [days]);
59
+ const hours = Array.from({ length: 24 }, (_, h) => h);
60
+ const now = new Date();
61
+ const todayKey = dayKeyTz(now, tz);
62
+ const nowMin = minutesIntoDay(now, tz);
63
+ // working DRAFT (live while editing) → Confirm writes, Cancel reverts; opt holds through the refetch
64
+ const [draft, setDraft] = React.useState(null);
65
+ const [opt, setOpt] = React.useState(null);
66
+ React.useEffect(() => {
67
+ setOpt(null);
68
+ setDraft(null);
69
+ }, [events]);
70
+ const [sel, setSel] = React.useState(null);
71
+ const [drag, setDrag] = React.useState(null);
72
+ const [rez, setRez] = React.useState(null);
73
+ const press = React.useRef(null);
74
+ const shift = (d, m) => new Date(d.getTime() + m * 60000);
75
+ const geomOf = (e) => ((draft === null || draft === void 0 ? void 0 : draft.id) === e.id ? { start: draft.start, end: draft.end } : (opt === null || opt === void 0 ? void 0 : opt.id) === e.id ? { start: opt.start, end: opt.end } : { start: e.start, end: e.end });
76
+ const r = () => colsRef.current.getBoundingClientRect();
77
+ const minuteRaw = (clientY) => clampMin(((clientY - r().top) / r().height) * 24 * 60);
78
+ const minuteSnap = (clientY) => snap(minuteRaw(clientY));
79
+ const dayAt = (clientX) => Math.max(0, Math.min(N - 1, Math.floor(((clientX - r().left) / r().width) * N)));
80
+ // absolute "grid minutes" (day-column × 1440 + minute) and the absolute instant under the cursor —
81
+ // these let a move/resize cross midnight into another day column instead of clamping at the boundary
82
+ const gridMin = (clientX, clientY) => dayAt(clientX) * 1440 + minuteRaw(clientY);
83
+ const instantAt = (clientX, clientY) => {
84
+ const d = days[dayAt(clientX)];
85
+ return instantFromZoned(d.getFullYear(), d.getMonth() + 1, d.getDate(), snap(minuteRaw(clientY)), tz);
86
+ };
87
+ // timed events → per-day SEGMENTS (a cross-midnight event is split at each day boundary, so it renders
88
+ // in every column it covers). Draft-aware, so dragging/resizing reshapes the segments live.
89
+ const buckets = React.useMemo(() => {
90
+ const dayStarts = days.map((d) => instantFromZoned(d.getFullYear(), d.getMonth() + 1, d.getDate(), 0, tz));
91
+ const b = days.map(() => []);
92
+ for (const e of events) {
93
+ if (e.allDay)
94
+ continue; // all-day → the spanning band above
95
+ const g = geomOf(e);
96
+ const startKey = dayKeyTz(g.start, tz);
97
+ const endKey = dayKeyTz(new Date(g.end.getTime() - 1), tz); // inclusive last day
98
+ for (let i = 0; i < days.length; i++) {
99
+ const dayStart = dayStarts[i].getTime();
100
+ const dayEnd = dayStart + DAY_MS;
101
+ const segStart = Math.max(g.start.getTime(), dayStart);
102
+ const segEnd = Math.min(g.end.getTime(), dayEnd);
103
+ if (segStart < segEnd)
104
+ b[i].push({ e, start: new Date(segStart), end: new Date(segEnd), isFirst: dayKeys[i] === startKey, isLast: dayKeys[i] === endKey });
105
+ }
106
+ }
107
+ return b.map((list) => layout(list));
108
+ // eslint-disable-next-line react-hooks/exhaustive-deps
109
+ }, [events, dayKeys, draft, opt, tz, days]);
110
+ // all-day (and multi-day) events → spanning bars in a band above the grid, stacked into lanes
111
+ const allDay = React.useMemo(() => {
112
+ const items = events
113
+ .filter((e) => e.allDay)
114
+ .map((e) => {
115
+ let s = dayKeys.indexOf(dayKeyTz(e.start, tz));
116
+ if (s < 0)
117
+ s = 0;
118
+ let en = dayKeys.indexOf(dayKeyTz(new Date(e.end.getTime() - 1), tz)); // end is exclusive-midnight → last covered day
119
+ if (en < 0)
120
+ en = N - 1;
121
+ if (en < s)
122
+ en = s;
123
+ return { e, startIdx: s, endIdx: en };
124
+ })
125
+ .sort((a, b) => a.startIdx - b.startIdx || b.endIdx - a.endIdx);
126
+ const laneEnds = [];
127
+ const placed = items.map((p) => {
128
+ let lane = laneEnds.findIndex((end) => p.startIdx > end);
129
+ if (lane === -1) {
130
+ lane = laneEnds.length;
131
+ laneEnds.push(p.endIdx);
132
+ }
133
+ else
134
+ laneEnds[lane] = p.endIdx;
135
+ return { ...p, lane };
136
+ });
137
+ return { placed, lanes: Math.max(1, laneEnds.length) };
138
+ }, [events, dayKeys, tz, N]);
139
+ const beginDrag = () => {
140
+ const p = press.current;
141
+ if (!p)
142
+ return;
143
+ clearTimeout(p.timer);
144
+ setDrag({ e: p.e, grabMin: p.grabMin, grabDay: p.grabDay, baseStart: p.baseStart, baseEnd: p.baseEnd });
145
+ };
146
+ const cancelPress = () => {
147
+ if (press.current) {
148
+ clearTimeout(press.current.timer);
149
+ press.current = null;
150
+ }
151
+ };
152
+ const onEventDown = (ev, e) => {
153
+ var _a, _b;
154
+ ev.stopPropagation();
155
+ (_b = (_a = colsRef.current) === null || _a === void 0 ? void 0 : _a.setPointerCapture) === null || _b === void 0 ? void 0 : _b.call(_a, ev.pointerId);
156
+ const g = geomOf(e);
157
+ const nextPress = { e, trigger: ev.currentTarget, grabMin: minuteRaw(ev.clientY), grabDay: dayAt(ev.clientX), baseStart: g.start, baseEnd: g.end, downY: ev.clientY, timer: 0 };
158
+ press.current = nextPress;
159
+ if (onMove)
160
+ nextPress.timer = window.setTimeout(beginDrag, LONG_PRESS);
161
+ };
162
+ const onResizeDown = (ev, e, edge) => {
163
+ var _a, _b;
164
+ ev.stopPropagation();
165
+ if (!onMove)
166
+ return;
167
+ (_b = (_a = colsRef.current) === null || _a === void 0 ? void 0 : _a.setPointerCapture) === null || _b === void 0 ? void 0 : _b.call(_a, ev.pointerId);
168
+ const g = geomOf(e);
169
+ setRez({ e, grabMin: minuteRaw(ev.clientY), edge, baseStart: g.start, baseEnd: g.end });
170
+ };
171
+ const onColsPointerDown = (ev) => {
172
+ var _a, _b;
173
+ if (ev.target.closest(`.${style.tgEvent}`))
174
+ return; // event handles itself
175
+ if (ev.target.closest(`.${style.tgConfirm}`))
176
+ return; // confirm bar handles itself
177
+ if (!onCreate)
178
+ return;
179
+ (_b = (_a = colsRef.current) === null || _a === void 0 ? void 0 : _a.setPointerCapture) === null || _b === void 0 ? void 0 : _b.call(_a, ev.pointerId);
180
+ setSel({ dayIndex: dayAt(ev.clientX), fromMin: minuteSnap(ev.clientY), toMin: minuteSnap(ev.clientY) + SNAP });
181
+ };
182
+ const onColsPointerMove = (ev) => {
183
+ if (sel) {
184
+ setSel((s) => (s ? { ...s, toMin: minuteSnap(ev.clientY) } : s));
185
+ return;
186
+ }
187
+ if (rez) {
188
+ const cand = instantAt(ev.clientX, ev.clientY).getTime(); // absolute target instant under the cursor
189
+ if (rez.edge === 'end') {
190
+ const newEnd = new Date(Math.max(cand, rez.baseStart.getTime() + SNAP * 60000)); // may land on a later day → spans midnight
191
+ setDraft({ id: rez.e.id, e: rez.e, start: rez.baseStart, end: newEnd });
192
+ }
193
+ else {
194
+ const newStart = new Date(Math.min(cand, rez.baseEnd.getTime() - SNAP * 60000));
195
+ setDraft({ id: rez.e.id, e: rez.e, start: newStart, end: rez.baseEnd });
196
+ }
197
+ return;
198
+ }
199
+ if (drag) {
200
+ // keep the grabbed point under the cursor; delta in absolute grid-minutes shifts BOTH ends (cross-day safe)
201
+ const delta = snap(gridMin(ev.clientX, ev.clientY) - (drag.grabDay * 1440 + drag.grabMin));
202
+ setDraft({ id: drag.e.id, e: drag.e, start: shift(drag.baseStart, delta), end: shift(drag.baseEnd, delta) });
203
+ return;
204
+ }
205
+ if (press.current && Math.abs(ev.clientY - press.current.downY) > MOVE_TOL)
206
+ beginDrag();
207
+ };
208
+ const onColsPointerUp = (ev) => {
209
+ const gesture = !!drag || !!rez;
210
+ if (sel && onCreate) {
211
+ const a = Math.min(sel.fromMin, sel.toMin);
212
+ const b = Math.max(sel.fromMin, sel.toMin);
213
+ const d = days[sel.dayIndex];
214
+ if (b - a >= SNAP)
215
+ onCreate(instantFromZoned(d.getFullYear(), d.getMonth() + 1, d.getDate(), a, tz), instantFromZoned(d.getFullYear(), d.getMonth() + 1, d.getDate(), b, tz));
216
+ setSel(null);
217
+ }
218
+ setDrag(null);
219
+ setRez(null);
220
+ const p = press.current;
221
+ if (p) {
222
+ clearTimeout(p.timer);
223
+ if (!gesture)
224
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(p.e, ev.clientX, ev.clientY, p.trigger); // a quick tap → host popover
225
+ press.current = null;
226
+ }
227
+ try {
228
+ ev.currentTarget.releasePointerCapture(ev.pointerId);
229
+ }
230
+ catch (_a) {
231
+ /* no capture */
232
+ }
233
+ };
234
+ const confirmDraft = () => {
235
+ if (!draft)
236
+ return;
237
+ setOpt({ id: draft.e.id, start: draft.start, end: draft.end });
238
+ onMove === null || onMove === void 0 ? void 0 : onMove(draft.e, draft.start, draft.end);
239
+ setDraft(null);
240
+ };
241
+ return (_jsxs("div", { className: style.tg, children: [_jsxs("div", { className: style.tgHead, children: [_jsx("div", { className: style.tgGutter }), days.map((d, i) => (_jsxs("div", { className: style.tgDayHead, "data-today": dayKeys[i] === todayKey || undefined, children: [_jsx("span", { className: style.tgDow, children: weekdays[d.getDay()] }), _jsx("span", { className: style.tgNum, children: d.getDate() })] }, d.toISOString())))] }), allDay.placed.length > 0 && (_jsxs("div", { className: style.tgAllDay, style: { gridTemplateColumns: `56px repeat(${N}, minmax(0, 1fr))`, gridTemplateRows: `repeat(${allDay.lanes}, 22px)` }, children: [_jsx("span", { className: style.tgAllDayLabel, children: labels.allDay }), allDay.placed.map(({ e, startIdx, endIdx, lane }) => {
242
+ var _a, _b, _c;
243
+ return (_jsx(Button, { type: "button", variant: "solid", size: "small", className: style.tgAllDayEvent, style: { gridColumn: `${startIdx + 2} / ${endIdx + 3}`, gridRow: lane + 1, ['--c']: (_a = e.color) !== null && _a !== void 0 ? _a : 'var(--control-accent)', ['--a']: (_c = (_b = e.accent) !== null && _b !== void 0 ? _b : e.color) !== null && _c !== void 0 ? _c : 'var(--control-accent)' }, onClick: (ev) => onSelect === null || onSelect === void 0 ? void 0 : onSelect(e, ev.clientX, ev.clientY, ev.currentTarget), title: e.title, children: e.title }, e.id));
244
+ })] })), _jsxs("div", { className: style.tgBody, style: { ['--hour-h']: `${HOUR_H}px` }, children: [_jsx("div", { className: style.tgGutter, children: hours.map((h) => (_jsx("div", { className: style.tgHour, children: _jsx("span", { className: style.tgHourLabel, children: h === 0 ? '' : new Date(2000, 0, 1, h).toLocaleTimeString(locale, { hour: 'numeric' }) }) }, h))) }), _jsx("div", { ref: colsRef, className: style.tgCols, onPointerDown: onColsPointerDown, onPointerMove: onColsPointerMove, onPointerUp: onColsPointerUp, onPointerCancel: () => { cancelPress(); setSel(null); setDrag(null); setRez(null); }, children: days.map((d, i) => {
245
+ const isToday = dayKeys[i] === todayKey;
246
+ const ghostHere = draft && dayKeyTz(draft.e.start, tz) === dayKeys[i]; // ghost lives in the ORIGINAL day column
247
+ return (_jsxs("div", { className: style.tgCol, "data-today": isToday || undefined, children: [hours.map((h) => (_jsx("div", { className: style.tgSlot }, h))), isToday && _jsx("div", { className: style.tgNow, style: { top: `calc(var(--hour-h) * ${nowMin / 60})` } }), sel && sel.dayIndex === i && _jsx("div", { className: style.tgSel, style: { top: `calc(var(--hour-h) * ${Math.min(sel.fromMin, sel.toMin) / 60})`, height: `calc(var(--hour-h) * ${Math.abs(sel.toMin - sel.fromMin) / 60})` } }), ghostHere &&
248
+ (() => {
249
+ var _a;
250
+ const oTop = minutesIntoDay(draft.e.start, tz);
251
+ const oDur = Math.min(1440 - oTop, Math.max(SNAP, (draft.e.end.getTime() - draft.e.start.getTime()) / 60000)); // clip to the day
252
+ return _jsx("div", { className: style.tgGhost, style: { top: `calc(var(--hour-h) * ${oTop / 60})`, height: `calc(var(--hour-h) * ${oDur / 60})`, left: '2px', right: '2px', ['--c']: (_a = draft.e.color) !== null && _a !== void 0 ? _a : 'var(--control-accent)' }, "aria-hidden": true });
253
+ })(), buckets[i].map(({ e, start, end, lane, lanes, isFirst, isLast }) => {
254
+ var _a, _b, _c;
255
+ const topMin = minutesIntoDay(start, tz);
256
+ const durMin = Math.max(SNAP, (end.getTime() - start.getTime()) / 60000);
257
+ const active = (drag === null || drag === void 0 ? void 0 : drag.e.id) === e.id || (rez === null || rez === void 0 ? void 0 : rez.e.id) === e.id;
258
+ return (_jsxs(Button, { type: "button", variant: "solid", size: "small", className: style.tgEvent, "data-dragging": active || undefined, "data-continues": !isLast || undefined, style: { top: `calc(var(--hour-h) * ${topMin / 60})`, height: `calc(var(--hour-h) * ${durMin / 60})`, left: `calc(${(lane / lanes) * 100}% + 2px)`, width: `calc(${100 / lanes}% - 4px)`, ['--c']: (_a = e.color) !== null && _a !== void 0 ? _a : 'var(--control-accent)', ['--a']: (_c = (_b = e.accent) !== null && _b !== void 0 ? _b : e.color) !== null && _c !== void 0 ? _c : 'var(--control-accent)' }, onPointerDown: (ev) => onEventDown(ev, e), onClick: (ev) => {
259
+ if (ev.detail !== 0)
260
+ return;
261
+ const bounds = ev.currentTarget.getBoundingClientRect();
262
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(e, bounds.left + bounds.width / 2, bounds.top + bounds.height / 2, ev.currentTarget);
263
+ }, title: labels.interactionHint, children: [onMove && isFirst && _jsx("span", { className: style.tgResizeTop, onPointerDown: (ev) => onResizeDown(ev, e, 'start'), "aria-hidden": true }), e.alert && isFirst && _jsx("span", { className: style.tgAlert, "data-tone": e.alert.tone, title: e.alert.label, role: "img", "aria-label": e.alert.label }), _jsx("span", { className: style.tgEvTime, children: isFirst ? formatTime(start, tz) : `↳ ${labels.continued}` }), _jsx("span", { className: style.tgEvTitle, children: e.title }), onMove && isLast && _jsx("span", { className: style.tgResize, onPointerDown: (ev) => onResizeDown(ev, e, 'end'), "aria-hidden": true })] }, e.id));
264
+ })] }, d.toISOString()));
265
+ }) })] }), draft &&
266
+ typeof document !== 'undefined' &&
267
+ createPortal(_jsxs("div", { className: style.tgConfirm, onPointerDown: (ev) => ev.stopPropagation(), children: [_jsx("span", { className: style.tgConfirmText, children: (() => {
268
+ const movedDay = dayKeyTz(draft.start, tz) !== dayKeyTz(draft.e.start, tz);
269
+ const spans = dayKeyTz(draft.start, tz) !== dayKeyTz(new Date(draft.end.getTime() - 1), tz);
270
+ const wd = (d) => d.toLocaleDateString(locale, { weekday: 'short', timeZone: tz });
271
+ const startStr = `${movedDay || spans ? `${wd(draft.start)} ` : ''}${formatTime(draft.start, tz)}`;
272
+ const endStr = `${spans ? `${wd(draft.end)} ` : ''}${formatTime(draft.end, tz)}`;
273
+ return `${startStr} – ${endStr}`;
274
+ })() }), _jsx(Button, { type: "button", size: "small", className: style.tgConfirmYes, onClick: confirmDraft, children: labels.confirm }), _jsx(Button, { type: "button", variant: "outline", size: "small", className: style.tgConfirmNo, onClick: () => setDraft(null), children: labels.cancel })] }), document.body)] }));
275
+ };
276
+ //# sourceMappingURL=TimeGrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeGrid.js","sourceRoot":"","sources":["../../src/TimeGrid.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,OAAO,KAAK,MAAM,uBAAuB,CAAC;AAE1C,uGAAuG;AACvG,wGAAwG;AACxG,wGAAwG;AACxG,oGAAoG;AACpG,+DAA+D;AAE/D,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,cAAc;AACjC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,UAAU;AAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,sCAAsC;AAC9D,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,mCAAmC;AACvD,MAAM,MAAM,GAAG,QAAQ,CAAC;AACxB,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AACxD,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE,MAAM,WAAW,GAAG,CAAC,CAAO,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACxF,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEnE,0GAA0G;AAC1G,SAAS,MAAM,CAAwD,KAAU;IAC/E,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACrH,MAAM,GAAG,GAA4C,EAAE,CAAC;IACxD,IAAI,OAAO,GAAQ,EAAE,CAAC;IACtB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC;YACpE,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClB,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,KAAK,MAAM,EAAE,IAAI,OAAO;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACjF,OAAO,GAAG,EAAE,CAAC;IACf,CAAC,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,UAAU;YAAE,KAAK,EAAE,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,KAAK,EAAE,CAAC;IACR,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAWhB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;IACvG,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEvC,qGAAqG;IACrG,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAiE,IAAI,CAAC,CAAC;IAC/G,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgD,IAAI,CAAC,CAAC;IAC1F,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,CAAC,IAAI,CAAC,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACb,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAA8D,IAAI,CAAC,CAAC;IACxG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAA+F,IAAI,CAAC,CAAC;IAC3I,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAqG,IAAI,CAAC,CAAC;IAC/I,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAmJ,IAAI,CAAC,CAAC;IAEnL,MAAM,KAAK,GAAG,CAAC,CAAO,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,CAAC,CAAe,EAA8B,EAAE,CAAC,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,EAAE,MAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,EAAE,MAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvN,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAQ,CAAC,qBAAqB,EAAE,CAAC;IACzD,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9F,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpH,mGAAmG;IACnG,qGAAqG;IACrG,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACjG,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE;QACrD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/B,OAAO,gBAAgB,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxG,CAAC,CAAC;IAEF,uGAAuG;IACvG,4FAA4F;IAC5F,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3G,MAAM,CAAC,GAAuF,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACjH,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,CAAC,MAAM;gBAAE,SAAS,CAAC,oCAAoC;YAC5D,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB;YACjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;gBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;gBACvD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;gBACjD,IAAI,QAAQ,GAAG,MAAM;oBAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;YAC7J,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,uDAAuD;IACzD,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IAE5C,8FAA8F;IAC9F,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAChC,MAAM,KAAK,GAAG,MAAM;aACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;aACvB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,GAAG,CAAC,CAAC;YACjB,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,+CAA+C;YACtH,IAAI,EAAE,GAAG,CAAC;gBAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,EAAE,GAAG,CAAC;gBAAE,EAAE,GAAG,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACxC,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7B,IAAI,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;YACzD,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;gBAChB,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;;gBAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YACjC,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IACzD,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7B,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QACxB,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1G,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAClC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,EAAyC,EAAE,CAAe,EAAE,EAAE;;QACjF,EAAE,CAAC,eAAe,EAAE,CAAC;QACrB,MAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,iBAAiB,mDAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAChL,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;QAC1B,IAAI,MAAM;YAAE,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACzE,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,CAAC,EAAsB,EAAE,CAAe,EAAE,IAAqB,EAAE,EAAE;;QACtF,EAAE,CAAC,eAAe,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,iBAAiB,mDAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1F,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,EAAsB,EAAE,EAAE;;QACnD,IAAK,EAAE,CAAC,MAAsB,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAAE,OAAO,CAAC,uBAAuB;QAC5F,IAAK,EAAE,CAAC,MAAsB,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAAE,OAAO,CAAC,6BAA6B;QACpG,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,iBAAiB,mDAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACjH,CAAC,CAAC;IACF,MAAM,iBAAiB,GAAG,CAAC,EAAsB,EAAE,EAAE;QACnD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QACD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,2CAA2C;YACrG,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,2CAA2C;gBAC5H,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;gBAChF,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,4GAA4G;YAC5G,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3F,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7G,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ;YAAE,SAAS,EAAE,CAAC;IAC1F,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,CAAC,EAAsB,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;QAChC,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI;gBAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9K,MAAM,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QACxB,IAAI,CAAC,EAAE,CAAC;YACN,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACtB,IAAI,CAAC,OAAO;gBAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B;YAC/F,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC;QAAC,WAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/D,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAE,KAAK,CAAC,EAAE,aACtB,eAAK,SAAS,EAAE,KAAK,CAAC,MAAM,aAC1B,cAAK,SAAS,EAAE,KAAK,CAAC,QAAQ,GAAI,EACjC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAClB,eAA2B,SAAS,EAAE,KAAK,CAAC,SAAS,gBAAc,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,SAAS,aACrG,eAAM,SAAS,EAAE,KAAK,CAAC,KAAK,YAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAQ,EAC3D,eAAM,SAAS,EAAE,KAAK,CAAC,KAAK,YAAG,CAAC,CAAC,OAAO,EAAE,GAAQ,KAF1C,CAAC,CAAC,WAAW,EAAE,CAGnB,CACP,CAAC,IACE,EACL,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAC3B,eAAK,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,mBAAmB,EAAE,eAAe,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,UAAU,MAAM,CAAC,KAAK,SAAS,EAAE,aACpJ,eAAM,SAAS,EAAE,KAAK,CAAC,aAAa,YAAG,MAAM,CAAC,MAAM,GAAQ,EAC3D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;;wBAAC,OAAA,CACpD,KAAC,MAAM,IAAY,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,QAAQ,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,KAAe,CAAC,EAAE,MAAA,CAAC,CAAC,KAAK,mCAAI,uBAAuB,EAAE,CAAC,KAAe,CAAC,EAAE,MAAA,MAAA,CAAC,CAAC,MAAM,mCAAI,CAAC,CAAC,KAAK,mCAAI,uBAAuB,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,YAC1X,CAAC,CAAC,KAAK,IADG,CAAC,CAAC,EAAE,CAER,CACV,CAAA;qBAAA,CAAC,IACE,CACP,EACD,eAAK,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,UAAoB,CAAC,EAAE,GAAG,MAAM,IAAI,EAAE,aAC5E,cAAK,SAAS,EAAE,KAAK,CAAC,QAAQ,YAC3B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,cAAa,SAAS,EAAE,KAAK,CAAC,MAAM,YAClC,eAAM,SAAS,EAAE,KAAK,CAAC,WAAW,YAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,GAAQ,IAD3H,CAAC,CAEL,CACP,CAAC,GACE,EACN,cAAK,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAC/N,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;4BACjB,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;4BACxC,MAAM,SAAS,GAAG,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC;4BAChH,OAAO,CACL,eAA2B,SAAS,EAAE,KAAK,CAAC,KAAK,gBAAc,OAAO,IAAI,SAAS,aAChF,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,cAAa,SAAS,EAAE,KAAK,CAAC,MAAM,IAA1B,CAAC,CAA6B,CACzC,CAAC,EACD,OAAO,IAAI,cAAK,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,wBAAwB,MAAM,GAAG,EAAE,GAAG,EAAE,GAAI,EAClG,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,cAAK,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,wBAAwB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,wBAAwB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAI,EACzN,SAAS;wCACR,CAAC,GAAG,EAAE;;4CACJ,MAAM,IAAI,GAAG,cAAc,CAAC,KAAM,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;4CAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB;4CACnI,OAAO,cAAK,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,wBAAwB,IAAI,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,wBAAwB,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,KAAe,CAAC,EAAE,MAAA,KAAM,CAAC,CAAC,CAAC,KAAK,mCAAI,uBAAuB,EAAE,wBAAgB,CAAC;wCACpP,CAAC,CAAC,EAAE,EACL,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;;wCAClE,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wCACzC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;wCACzE,MAAM,MAAM,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,CAAC,CAAC,EAAE,MAAK,CAAC,CAAC,EAAE,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,CAAC,CAAC,EAAE,MAAK,CAAC,CAAC,EAAE,CAAC;wCACzD,OAAO,CACL,MAAC,MAAM,IAEL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,OAAO,EACZ,SAAS,EAAE,KAAK,CAAC,OAAO,mBACT,MAAM,IAAI,SAAS,oBAClB,CAAC,MAAM,IAAI,SAAS,EACpC,KAAK,EAAE,EAAE,GAAG,EAAE,wBAAwB,MAAM,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,wBAAwB,MAAM,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,UAAU,EAAE,KAAK,EAAE,QAAQ,GAAG,GAAG,KAAK,UAAU,EAAE,CAAC,KAAe,CAAC,EAAE,MAAA,CAAC,CAAC,KAAK,mCAAI,uBAAuB,EAAE,CAAC,KAAe,CAAC,EAAE,MAAA,MAAA,CAAC,CAAC,MAAM,mCAAI,CAAC,CAAC,KAAK,mCAAI,uBAAuB,EAAE,EACpT,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,EACzC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE;gDACd,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;oDAAE,OAAO;gDAC5B,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;gDACxD,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,CAAC,EAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC;4CAClG,CAAC,EACD,KAAK,EAAE,MAAM,CAAC,eAAe,aAE5B,MAAM,IAAI,OAAO,IAAI,eAAM,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,wBAAgB,EAC5H,CAAC,CAAC,KAAK,IAAI,OAAO,IAAI,eAAM,SAAS,EAAE,KAAK,CAAC,OAAO,eAAa,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAC,KAAK,gBAAa,CAAC,CAAC,KAAK,CAAC,KAAK,GAAI,EAC9I,eAAM,SAAS,EAAE,KAAK,CAAC,QAAQ,YAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,SAAS,EAAE,GAAQ,EACnG,eAAM,SAAS,EAAE,KAAK,CAAC,SAAS,YAAG,CAAC,CAAC,KAAK,GAAQ,EACjD,MAAM,IAAI,MAAM,IAAI,eAAM,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,wBAAgB,KApBlH,CAAC,CAAC,EAAE,CAqBF,CACV,CAAC;oCACJ,CAAC,CAAC,KAzCM,CAAC,CAAC,WAAW,EAAE,CA0CnB,CACP,CAAC;wBACJ,CAAC,CAAC,GACE,IACF,EAIL,KAAK;gBACJ,OAAO,QAAQ,KAAK,WAAW;gBAC/B,YAAY,CACZ,eAAK,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,aAC1E,eAAM,SAAS,EAAE,KAAK,CAAC,aAAa,YACjC,CAAC,GAAG,EAAE;gCACL,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gCAC3E,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gCAC5F,MAAM,EAAE,GAAG,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;gCACzF,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;gCACnG,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;gCACjF,OAAO,GAAG,QAAQ,MAAM,MAAM,EAAE,CAAC;4BACnC,CAAC,CAAC,EAAE,GACC,EACP,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,YACpF,MAAM,CAAC,OAAO,GACR,EACT,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAC7G,MAAM,CAAC,MAAM,GACP,IACL,EACN,QAAQ,CAAC,IAAI,CACd,IACG,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import './package.js';
2
+ export * from './package.js';
3
+ export type { CalEventData, CalView, CalRange, CalLane, CalResource, CalInvite, CalConnection, CalSyncDirection, CalProviderOption } from './types.js';
4
+ export { CAL_PROVIDERS } from './types.js';
5
+ export { Calendar, type CalLabels, type CalendarProps } from './Calendar.js';
6
+ export { expandRule, expandEvents } from './recurrence.js';
7
+ export { rangeForCalendarView } from './range.js';
8
+ export { createRefreshBus, useRefreshVersion, calendarBus, type RefreshBus } from './refreshBus.js';
9
+ export { viewerTz, formatTime, formatTimeZone, isCrossTz, dayKeyTz, inputValue, instantFromInput } from './tz.js';
10
+ export { calendarTranslations, defaultCalendarText } from './translations.js';
@@ -0,0 +1,12 @@
1
+ // @_linked/calendar — public, shape-agnostic calendar engine. Domain packages bind canonical graph
2
+ // projections to these controlled contracts and route change callbacks through their own Shape verbs.
3
+ import './package.js';
4
+ export * from './package.js';
5
+ export { CAL_PROVIDERS } from './types.js';
6
+ export { Calendar } from './Calendar.js';
7
+ export { expandRule, expandEvents } from './recurrence.js';
8
+ export { rangeForCalendarView } from './range.js';
9
+ export { createRefreshBus, useRefreshVersion, calendarBus } from './refreshBus.js';
10
+ export { viewerTz, formatTime, formatTimeZone, isCrossTz, dayKeyTz, inputValue, instantFromInput } from './tz.js';
11
+ export { calendarTranslations, defaultCalendarText } from './translations.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,sGAAsG;AACtG,OAAO,cAAc,CAAC;AAEtB,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAsC,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AACpG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAClH,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** Official first-party package identity. Hosting it inside Serve does not change its Linked identity. */
2
+ export declare const calendarPackageName: "@_linked/calendar";
3
+ export declare const calendarPackageBaseUri: "https://linked.cm/";
4
+ export declare const getPackageShape: (name: string) => import("@_linked/core/shapes/Shape.js").ShapeConstructor | undefined, linkedOntology: (allFileExports: any, nameSpace: (term: string) => import("@_linked/core/utils/NodeReference.js").NodeReferenceValue, suggestedPrefixAndFileName: string, loadDataFunction?: () => Promise<any>, dataSource?: string | string[]) => void, linkedShape: {
5
+ <T extends typeof import("@_linked/core/shapes/Shape.js").Shape>(constructor: T): void;
6
+ <T extends typeof import("@_linked/core/shapes/Shape.js").Shape>(config?: import("@_linked/core/utils/Package").ShapeConfig): (constructor: T) => void;
7
+ }, linkedUtil: (constructor: any) => any, packageExports: any, packageMetadata: import("@_linked/core/utils/Package").PackageMetadata, registerPackageExport: (exportedObject: any) => void, registerPackageModule: (_module: any) => void;
8
+ export declare const packageName: string;
@@ -0,0 +1,10 @@
1
+ import { linkedPackage } from '@_linked/core/utils/Package';
2
+ /** Official first-party package identity. Hosting it inside Serve does not change its Linked identity. */
3
+ export const calendarPackageName = '@_linked/calendar';
4
+ export const calendarPackageBaseUri = 'https://linked.cm/';
5
+ const registration = linkedPackage(calendarPackageName, {
6
+ baseUri: calendarPackageBaseUri,
7
+ });
8
+ export const { getPackageShape, linkedOntology, linkedShape, linkedUtil, packageExports, packageMetadata, registerPackageExport, registerPackageModule, } = registration;
9
+ export const packageName = registration.packageName;
10
+ //# sourceMappingURL=package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/package.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,0GAA0G;AAC1G,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAA4B,CAAC;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAA6B,CAAC;AAEpE,MAAM,YAAY,GAAG,aAAa,CAAC,mBAAmB,EAAE;IACtD,OAAO,EAAE,sBAAsB;CAChC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,UAAU,EACV,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,qBAAqB,GACtB,GAAG,YAAY,CAAC;AAEjB,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CalRange, CalView } from './types.js';
2
+ /** The bounded recurrence/query window rendered by a calendar view. */
3
+ export declare function rangeForCalendarView(view: CalView, cursor: Date): CalRange;