@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.
- package/LICENSE +12 -0
- package/README.md +48 -0
- package/THIRD_PARTY_NOTICES.md +12 -0
- package/lib/esm/Calendar.d.ts +57 -0
- package/lib/esm/Calendar.js +202 -0
- package/lib/esm/Calendar.js.map +1 -0
- package/lib/esm/Calendar.module.css +912 -0
- package/lib/esm/EventPopover.d.ts +17 -0
- package/lib/esm/EventPopover.js +104 -0
- package/lib/esm/EventPopover.js.map +1 -0
- package/lib/esm/ResourceGrid.d.ts +11 -0
- package/lib/esm/ResourceGrid.js +36 -0
- package/lib/esm/ResourceGrid.js.map +1 -0
- package/lib/esm/TimeGrid.d.ts +15 -0
- package/lib/esm/TimeGrid.js +276 -0
- package/lib/esm/TimeGrid.js.map +1 -0
- package/lib/esm/index.d.ts +10 -0
- package/lib/esm/index.js +12 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/package.d.ts +8 -0
- package/lib/esm/package.js +10 -0
- package/lib/esm/package.js.map +1 -0
- package/lib/esm/range.d.ts +3 -0
- package/lib/esm/range.js +22 -0
- package/lib/esm/range.js.map +1 -0
- package/lib/esm/recurrence.d.ts +14 -0
- package/lib/esm/recurrence.js +60 -0
- package/lib/esm/recurrence.js.map +1 -0
- package/lib/esm/refreshBus.d.ts +10 -0
- package/lib/esm/refreshBus.js +25 -0
- package/lib/esm/refreshBus.js.map +1 -0
- package/lib/esm/styles.d.ts +4 -0
- package/lib/esm/translations/en.json +49 -0
- package/lib/esm/translations.d.ts +56 -0
- package/lib/esm/translations.js +44 -0
- package/lib/esm/translations.js.map +1 -0
- package/lib/esm/types.d.ts +97 -0
- package/lib/esm/types.js +11 -0
- package/lib/esm/types.js.map +1 -0
- package/lib/esm/tz.d.ts +30 -0
- package/lib/esm/tz.js +78 -0
- package/lib/esm/tz.js.map +1 -0
- package/package.json +98 -0
- 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":"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"}
|
|
@@ -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';
|
package/lib/esm/index.js
ADDED
|
@@ -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"}
|