@underverse-ui/underverse 0.2.88 → 0.2.89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +92 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +22 -1
- package/dist/index.d.ts +22 -1
- package/dist/index.js +92 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -8007,6 +8007,15 @@ function CalendarTimeline({
|
|
|
8007
8007
|
resources,
|
|
8008
8008
|
events,
|
|
8009
8009
|
size = "md",
|
|
8010
|
+
enableEventSheet,
|
|
8011
|
+
eventSheetSize = "md",
|
|
8012
|
+
renderEventSheet,
|
|
8013
|
+
selectedEventId,
|
|
8014
|
+
defaultSelectedEventId,
|
|
8015
|
+
onSelectedEventIdChange,
|
|
8016
|
+
eventSheetOpen,
|
|
8017
|
+
defaultEventSheetOpen,
|
|
8018
|
+
onEventSheetOpenChange,
|
|
8010
8019
|
view,
|
|
8011
8020
|
defaultView = "month",
|
|
8012
8021
|
onViewChange,
|
|
@@ -8047,6 +8056,28 @@ function CalendarTimeline({
|
|
|
8047
8056
|
const detectedLocale = useLocale();
|
|
8048
8057
|
const resolvedLocale = React28.useMemo(() => localeToBCP47(locale ?? detectedLocale), [locale, detectedLocale]);
|
|
8049
8058
|
const resolvedTimeZone = React28.useMemo(() => timeZone ?? Intl.DateTimeFormat().resolvedOptions().timeZone ?? "UTC", [timeZone]);
|
|
8059
|
+
const effectiveEnableEventSheet = enableEventSheet ?? Boolean(renderEventSheet);
|
|
8060
|
+
const isControlledSelectedEventId = selectedEventId !== void 0;
|
|
8061
|
+
const [internalSelectedEventId, setInternalSelectedEventId] = React28.useState(defaultSelectedEventId ?? null);
|
|
8062
|
+
const activeSelectedEventId = isControlledSelectedEventId ? selectedEventId : internalSelectedEventId;
|
|
8063
|
+
const setSelectedEventId = React28.useCallback(
|
|
8064
|
+
(next) => {
|
|
8065
|
+
if (!isControlledSelectedEventId) setInternalSelectedEventId(next);
|
|
8066
|
+
onSelectedEventIdChange?.(next);
|
|
8067
|
+
},
|
|
8068
|
+
[isControlledSelectedEventId, onSelectedEventIdChange]
|
|
8069
|
+
);
|
|
8070
|
+
const isControlledEventSheetOpen = eventSheetOpen !== void 0;
|
|
8071
|
+
const [internalEventSheetOpen, setInternalEventSheetOpen] = React28.useState(defaultEventSheetOpen ?? false);
|
|
8072
|
+
const activeEventSheetOpen = isControlledEventSheetOpen ? Boolean(eventSheetOpen) : internalEventSheetOpen;
|
|
8073
|
+
const setEventSheetOpen = React28.useCallback(
|
|
8074
|
+
(next) => {
|
|
8075
|
+
if (!isControlledEventSheetOpen) setInternalEventSheetOpen(next);
|
|
8076
|
+
onEventSheetOpenChange?.(next);
|
|
8077
|
+
if (!next) setSelectedEventId(null);
|
|
8078
|
+
},
|
|
8079
|
+
[isControlledEventSheetOpen, onEventSheetOpenChange, setSelectedEventId]
|
|
8080
|
+
);
|
|
8050
8081
|
const sizeConfig = React28.useMemo(() => {
|
|
8051
8082
|
const cfgBySize = {
|
|
8052
8083
|
sm: {
|
|
@@ -8263,6 +8294,31 @@ function CalendarTimeline({
|
|
|
8263
8294
|
for (const r of resources) map.set(r.id, r);
|
|
8264
8295
|
return map;
|
|
8265
8296
|
}, [resources]);
|
|
8297
|
+
const selectedEvent = React28.useMemo(() => {
|
|
8298
|
+
if (!activeSelectedEventId) return null;
|
|
8299
|
+
const found = normalizedEvents.find((e) => e.id === activeSelectedEventId);
|
|
8300
|
+
return found ?? null;
|
|
8301
|
+
}, [activeSelectedEventId, normalizedEvents]);
|
|
8302
|
+
const selectedResource = React28.useMemo(() => {
|
|
8303
|
+
if (!selectedEvent) return void 0;
|
|
8304
|
+
return resourceById.get(selectedEvent.resourceId);
|
|
8305
|
+
}, [resourceById, selectedEvent]);
|
|
8306
|
+
const selectedTimeText = React28.useMemo(() => {
|
|
8307
|
+
if (!selectedEvent) return "";
|
|
8308
|
+
return formatters?.eventTime?.({
|
|
8309
|
+
start: selectedEvent._start,
|
|
8310
|
+
end: selectedEvent._end,
|
|
8311
|
+
locale: resolvedLocale,
|
|
8312
|
+
timeZone: resolvedTimeZone,
|
|
8313
|
+
view: activeView
|
|
8314
|
+
}) ?? defaultEventTime({ start: selectedEvent._start, end: selectedEvent._end, locale: resolvedLocale, timeZone: resolvedTimeZone, view: activeView });
|
|
8315
|
+
}, [activeView, formatters, resolvedLocale, resolvedTimeZone, selectedEvent]);
|
|
8316
|
+
React28.useEffect(() => {
|
|
8317
|
+
if (!effectiveEnableEventSheet) return;
|
|
8318
|
+
if (activeEventSheetOpen && activeSelectedEventId && !selectedEvent) {
|
|
8319
|
+
setEventSheetOpen(false);
|
|
8320
|
+
}
|
|
8321
|
+
}, [activeEventSheetOpen, activeSelectedEventId, effectiveEnableEventSheet, selectedEvent, setEventSheetOpen]);
|
|
8266
8322
|
const leftRef = React28.useRef(null);
|
|
8267
8323
|
const bodyRef = React28.useRef(null);
|
|
8268
8324
|
const headerRef = React28.useRef(null);
|
|
@@ -8731,7 +8787,13 @@ function CalendarTimeline({
|
|
|
8731
8787
|
role: "button",
|
|
8732
8788
|
tabIndex: 0,
|
|
8733
8789
|
"aria-label": aria,
|
|
8734
|
-
onClick: () =>
|
|
8790
|
+
onClick: () => {
|
|
8791
|
+
onEventClick?.(ev);
|
|
8792
|
+
if (effectiveEnableEventSheet) {
|
|
8793
|
+
setSelectedEventId(ev.id);
|
|
8794
|
+
setEventSheetOpen(true);
|
|
8795
|
+
}
|
|
8796
|
+
},
|
|
8735
8797
|
onDoubleClick: () => onEventDoubleClick?.(ev),
|
|
8736
8798
|
onPointerDown: (e) => onPointerDownEvent(e, ev, "move"),
|
|
8737
8799
|
children: [
|
|
@@ -8797,7 +8859,35 @@ function CalendarTimeline({
|
|
|
8797
8859
|
]
|
|
8798
8860
|
}
|
|
8799
8861
|
)
|
|
8800
|
-
] })
|
|
8862
|
+
] }),
|
|
8863
|
+
effectiveEnableEventSheet && selectedEvent ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
8864
|
+
Sheet,
|
|
8865
|
+
{
|
|
8866
|
+
open: activeEventSheetOpen,
|
|
8867
|
+
onOpenChange: setEventSheetOpen,
|
|
8868
|
+
side: "right",
|
|
8869
|
+
size: eventSheetSize,
|
|
8870
|
+
title: selectedEvent.title ?? "Event",
|
|
8871
|
+
description: selectedTimeText || void 0,
|
|
8872
|
+
children: renderEventSheet ? renderEventSheet({
|
|
8873
|
+
event: selectedEvent,
|
|
8874
|
+
resource: selectedResource,
|
|
8875
|
+
close: () => setEventSheetOpen(false),
|
|
8876
|
+
locale: resolvedLocale,
|
|
8877
|
+
timeZone: resolvedTimeZone,
|
|
8878
|
+
view: activeView
|
|
8879
|
+
}) : /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-3", children: [
|
|
8880
|
+
selectedResource?.label ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { children: [
|
|
8881
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "text-xs text-muted-foreground", children: t("resourcesHeader") }),
|
|
8882
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "font-medium", children: selectedResource.label })
|
|
8883
|
+
] }) : null,
|
|
8884
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { children: [
|
|
8885
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "text-xs text-muted-foreground", children: "ID" }),
|
|
8886
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "font-mono text-xs break-all", children: selectedEvent.id })
|
|
8887
|
+
] })
|
|
8888
|
+
] })
|
|
8889
|
+
}
|
|
8890
|
+
) : null
|
|
8801
8891
|
]
|
|
8802
8892
|
}
|
|
8803
8893
|
);
|