@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.d.cts
CHANGED
|
@@ -904,6 +904,7 @@ declare function Calendar({ month, defaultMonth, onMonthChange, value, defaultVa
|
|
|
904
904
|
type CalendarTimelineView = "month" | "week" | "day";
|
|
905
905
|
type CalendarTimelineDateInput = Date | string | number;
|
|
906
906
|
type CalendarTimelineSize = "sm" | "md" | "xl";
|
|
907
|
+
type CalendarTimelineSheetSize = "sm" | "md" | "lg" | "xl" | "full";
|
|
907
908
|
interface CalendarTimelineGroup {
|
|
908
909
|
id: string;
|
|
909
910
|
label: React$1.ReactNode;
|
|
@@ -980,6 +981,26 @@ interface CalendarTimelineProps<TResourceMeta = unknown, TEventMeta = unknown> e
|
|
|
980
981
|
resources: CalendarTimelineResource<TResourceMeta>[];
|
|
981
982
|
events: CalendarTimelineEvent<TEventMeta>[];
|
|
982
983
|
size?: CalendarTimelineSize;
|
|
984
|
+
/**
|
|
985
|
+
* Enable the built-in right-side event details sheet on click.
|
|
986
|
+
* If `renderEventSheet` is provided, this defaults to enabled.
|
|
987
|
+
*/
|
|
988
|
+
enableEventSheet?: boolean;
|
|
989
|
+
eventSheetSize?: CalendarTimelineSheetSize;
|
|
990
|
+
renderEventSheet?: (args: {
|
|
991
|
+
event: CalendarTimelineEvent<TEventMeta>;
|
|
992
|
+
resource?: CalendarTimelineResource<TResourceMeta>;
|
|
993
|
+
close: () => void;
|
|
994
|
+
locale: string;
|
|
995
|
+
timeZone: string;
|
|
996
|
+
view: CalendarTimelineView;
|
|
997
|
+
}) => React$1.ReactNode;
|
|
998
|
+
selectedEventId?: string | null;
|
|
999
|
+
defaultSelectedEventId?: string | null;
|
|
1000
|
+
onSelectedEventIdChange?: (eventId: string | null) => void;
|
|
1001
|
+
eventSheetOpen?: boolean;
|
|
1002
|
+
defaultEventSheetOpen?: boolean;
|
|
1003
|
+
onEventSheetOpenChange?: (open: boolean) => void;
|
|
983
1004
|
view?: CalendarTimelineView;
|
|
984
1005
|
defaultView?: CalendarTimelineView;
|
|
985
1006
|
onViewChange?: (view: CalendarTimelineView) => void;
|
|
@@ -1041,7 +1062,7 @@ interface CalendarTimelineProps<TResourceMeta = unknown, TEventMeta = unknown> e
|
|
|
1041
1062
|
virtualization?: CalendarTimelineVirtualization;
|
|
1042
1063
|
}
|
|
1043
1064
|
|
|
1044
|
-
declare function CalendarTimeline<TResourceMeta = unknown, TEventMeta = unknown>({ resources, events, size, view, defaultView, onViewChange, date, defaultDate, onDateChange, weekStartsOn, locale, timeZone, labels, formatters, groups, groupCollapsed, defaultGroupCollapsed, onGroupCollapsedChange, resourceColumnWidth, rowHeight, slotMinWidth, dayTimeStepMinutes, maxLanesPerRow, now, renderResource, renderGroup, renderEvent, interactions, onRangeChange, onEventClick, onEventDoubleClick, onCreateEvent, onEventMove, onEventResize, onMoreClick, virtualization, className, ...rest }: CalendarTimelineProps<TResourceMeta, TEventMeta>): react_jsx_runtime.JSX.Element;
|
|
1065
|
+
declare function CalendarTimeline<TResourceMeta = unknown, TEventMeta = unknown>({ resources, events, size, enableEventSheet, eventSheetSize, renderEventSheet, selectedEventId, defaultSelectedEventId, onSelectedEventIdChange, eventSheetOpen, defaultEventSheetOpen, onEventSheetOpenChange, view, defaultView, onViewChange, date, defaultDate, onDateChange, weekStartsOn, locale, timeZone, labels, formatters, groups, groupCollapsed, defaultGroupCollapsed, onGroupCollapsedChange, resourceColumnWidth, rowHeight, slotMinWidth, dayTimeStepMinutes, maxLanesPerRow, now, renderResource, renderGroup, renderEvent, interactions, onRangeChange, onEventClick, onEventDoubleClick, onCreateEvent, onEventMove, onEventResize, onMoreClick, virtualization, className, ...rest }: CalendarTimelineProps<TResourceMeta, TEventMeta>): react_jsx_runtime.JSX.Element;
|
|
1045
1066
|
|
|
1046
1067
|
type ComboboxOption = string | {
|
|
1047
1068
|
label: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -904,6 +904,7 @@ declare function Calendar({ month, defaultMonth, onMonthChange, value, defaultVa
|
|
|
904
904
|
type CalendarTimelineView = "month" | "week" | "day";
|
|
905
905
|
type CalendarTimelineDateInput = Date | string | number;
|
|
906
906
|
type CalendarTimelineSize = "sm" | "md" | "xl";
|
|
907
|
+
type CalendarTimelineSheetSize = "sm" | "md" | "lg" | "xl" | "full";
|
|
907
908
|
interface CalendarTimelineGroup {
|
|
908
909
|
id: string;
|
|
909
910
|
label: React$1.ReactNode;
|
|
@@ -980,6 +981,26 @@ interface CalendarTimelineProps<TResourceMeta = unknown, TEventMeta = unknown> e
|
|
|
980
981
|
resources: CalendarTimelineResource<TResourceMeta>[];
|
|
981
982
|
events: CalendarTimelineEvent<TEventMeta>[];
|
|
982
983
|
size?: CalendarTimelineSize;
|
|
984
|
+
/**
|
|
985
|
+
* Enable the built-in right-side event details sheet on click.
|
|
986
|
+
* If `renderEventSheet` is provided, this defaults to enabled.
|
|
987
|
+
*/
|
|
988
|
+
enableEventSheet?: boolean;
|
|
989
|
+
eventSheetSize?: CalendarTimelineSheetSize;
|
|
990
|
+
renderEventSheet?: (args: {
|
|
991
|
+
event: CalendarTimelineEvent<TEventMeta>;
|
|
992
|
+
resource?: CalendarTimelineResource<TResourceMeta>;
|
|
993
|
+
close: () => void;
|
|
994
|
+
locale: string;
|
|
995
|
+
timeZone: string;
|
|
996
|
+
view: CalendarTimelineView;
|
|
997
|
+
}) => React$1.ReactNode;
|
|
998
|
+
selectedEventId?: string | null;
|
|
999
|
+
defaultSelectedEventId?: string | null;
|
|
1000
|
+
onSelectedEventIdChange?: (eventId: string | null) => void;
|
|
1001
|
+
eventSheetOpen?: boolean;
|
|
1002
|
+
defaultEventSheetOpen?: boolean;
|
|
1003
|
+
onEventSheetOpenChange?: (open: boolean) => void;
|
|
983
1004
|
view?: CalendarTimelineView;
|
|
984
1005
|
defaultView?: CalendarTimelineView;
|
|
985
1006
|
onViewChange?: (view: CalendarTimelineView) => void;
|
|
@@ -1041,7 +1062,7 @@ interface CalendarTimelineProps<TResourceMeta = unknown, TEventMeta = unknown> e
|
|
|
1041
1062
|
virtualization?: CalendarTimelineVirtualization;
|
|
1042
1063
|
}
|
|
1043
1064
|
|
|
1044
|
-
declare function CalendarTimeline<TResourceMeta = unknown, TEventMeta = unknown>({ resources, events, size, view, defaultView, onViewChange, date, defaultDate, onDateChange, weekStartsOn, locale, timeZone, labels, formatters, groups, groupCollapsed, defaultGroupCollapsed, onGroupCollapsedChange, resourceColumnWidth, rowHeight, slotMinWidth, dayTimeStepMinutes, maxLanesPerRow, now, renderResource, renderGroup, renderEvent, interactions, onRangeChange, onEventClick, onEventDoubleClick, onCreateEvent, onEventMove, onEventResize, onMoreClick, virtualization, className, ...rest }: CalendarTimelineProps<TResourceMeta, TEventMeta>): react_jsx_runtime.JSX.Element;
|
|
1065
|
+
declare function CalendarTimeline<TResourceMeta = unknown, TEventMeta = unknown>({ resources, events, size, enableEventSheet, eventSheetSize, renderEventSheet, selectedEventId, defaultSelectedEventId, onSelectedEventIdChange, eventSheetOpen, defaultEventSheetOpen, onEventSheetOpenChange, view, defaultView, onViewChange, date, defaultDate, onDateChange, weekStartsOn, locale, timeZone, labels, formatters, groups, groupCollapsed, defaultGroupCollapsed, onGroupCollapsedChange, resourceColumnWidth, rowHeight, slotMinWidth, dayTimeStepMinutes, maxLanesPerRow, now, renderResource, renderGroup, renderEvent, interactions, onRangeChange, onEventClick, onEventDoubleClick, onCreateEvent, onEventMove, onEventResize, onMoreClick, virtualization, className, ...rest }: CalendarTimelineProps<TResourceMeta, TEventMeta>): react_jsx_runtime.JSX.Element;
|
|
1045
1066
|
|
|
1046
1067
|
type ComboboxOption = string | {
|
|
1047
1068
|
label: string;
|
package/dist/index.js
CHANGED
|
@@ -7832,6 +7832,15 @@ function CalendarTimeline({
|
|
|
7832
7832
|
resources,
|
|
7833
7833
|
events,
|
|
7834
7834
|
size = "md",
|
|
7835
|
+
enableEventSheet,
|
|
7836
|
+
eventSheetSize = "md",
|
|
7837
|
+
renderEventSheet,
|
|
7838
|
+
selectedEventId,
|
|
7839
|
+
defaultSelectedEventId,
|
|
7840
|
+
onSelectedEventIdChange,
|
|
7841
|
+
eventSheetOpen,
|
|
7842
|
+
defaultEventSheetOpen,
|
|
7843
|
+
onEventSheetOpenChange,
|
|
7835
7844
|
view,
|
|
7836
7845
|
defaultView = "month",
|
|
7837
7846
|
onViewChange,
|
|
@@ -7872,6 +7881,28 @@ function CalendarTimeline({
|
|
|
7872
7881
|
const detectedLocale = useLocale();
|
|
7873
7882
|
const resolvedLocale = React28.useMemo(() => localeToBCP47(locale ?? detectedLocale), [locale, detectedLocale]);
|
|
7874
7883
|
const resolvedTimeZone = React28.useMemo(() => timeZone ?? Intl.DateTimeFormat().resolvedOptions().timeZone ?? "UTC", [timeZone]);
|
|
7884
|
+
const effectiveEnableEventSheet = enableEventSheet ?? Boolean(renderEventSheet);
|
|
7885
|
+
const isControlledSelectedEventId = selectedEventId !== void 0;
|
|
7886
|
+
const [internalSelectedEventId, setInternalSelectedEventId] = React28.useState(defaultSelectedEventId ?? null);
|
|
7887
|
+
const activeSelectedEventId = isControlledSelectedEventId ? selectedEventId : internalSelectedEventId;
|
|
7888
|
+
const setSelectedEventId = React28.useCallback(
|
|
7889
|
+
(next) => {
|
|
7890
|
+
if (!isControlledSelectedEventId) setInternalSelectedEventId(next);
|
|
7891
|
+
onSelectedEventIdChange?.(next);
|
|
7892
|
+
},
|
|
7893
|
+
[isControlledSelectedEventId, onSelectedEventIdChange]
|
|
7894
|
+
);
|
|
7895
|
+
const isControlledEventSheetOpen = eventSheetOpen !== void 0;
|
|
7896
|
+
const [internalEventSheetOpen, setInternalEventSheetOpen] = React28.useState(defaultEventSheetOpen ?? false);
|
|
7897
|
+
const activeEventSheetOpen = isControlledEventSheetOpen ? Boolean(eventSheetOpen) : internalEventSheetOpen;
|
|
7898
|
+
const setEventSheetOpen = React28.useCallback(
|
|
7899
|
+
(next) => {
|
|
7900
|
+
if (!isControlledEventSheetOpen) setInternalEventSheetOpen(next);
|
|
7901
|
+
onEventSheetOpenChange?.(next);
|
|
7902
|
+
if (!next) setSelectedEventId(null);
|
|
7903
|
+
},
|
|
7904
|
+
[isControlledEventSheetOpen, onEventSheetOpenChange, setSelectedEventId]
|
|
7905
|
+
);
|
|
7875
7906
|
const sizeConfig = React28.useMemo(() => {
|
|
7876
7907
|
const cfgBySize = {
|
|
7877
7908
|
sm: {
|
|
@@ -8088,6 +8119,31 @@ function CalendarTimeline({
|
|
|
8088
8119
|
for (const r of resources) map.set(r.id, r);
|
|
8089
8120
|
return map;
|
|
8090
8121
|
}, [resources]);
|
|
8122
|
+
const selectedEvent = React28.useMemo(() => {
|
|
8123
|
+
if (!activeSelectedEventId) return null;
|
|
8124
|
+
const found = normalizedEvents.find((e) => e.id === activeSelectedEventId);
|
|
8125
|
+
return found ?? null;
|
|
8126
|
+
}, [activeSelectedEventId, normalizedEvents]);
|
|
8127
|
+
const selectedResource = React28.useMemo(() => {
|
|
8128
|
+
if (!selectedEvent) return void 0;
|
|
8129
|
+
return resourceById.get(selectedEvent.resourceId);
|
|
8130
|
+
}, [resourceById, selectedEvent]);
|
|
8131
|
+
const selectedTimeText = React28.useMemo(() => {
|
|
8132
|
+
if (!selectedEvent) return "";
|
|
8133
|
+
return formatters?.eventTime?.({
|
|
8134
|
+
start: selectedEvent._start,
|
|
8135
|
+
end: selectedEvent._end,
|
|
8136
|
+
locale: resolvedLocale,
|
|
8137
|
+
timeZone: resolvedTimeZone,
|
|
8138
|
+
view: activeView
|
|
8139
|
+
}) ?? defaultEventTime({ start: selectedEvent._start, end: selectedEvent._end, locale: resolvedLocale, timeZone: resolvedTimeZone, view: activeView });
|
|
8140
|
+
}, [activeView, formatters, resolvedLocale, resolvedTimeZone, selectedEvent]);
|
|
8141
|
+
React28.useEffect(() => {
|
|
8142
|
+
if (!effectiveEnableEventSheet) return;
|
|
8143
|
+
if (activeEventSheetOpen && activeSelectedEventId && !selectedEvent) {
|
|
8144
|
+
setEventSheetOpen(false);
|
|
8145
|
+
}
|
|
8146
|
+
}, [activeEventSheetOpen, activeSelectedEventId, effectiveEnableEventSheet, selectedEvent, setEventSheetOpen]);
|
|
8091
8147
|
const leftRef = React28.useRef(null);
|
|
8092
8148
|
const bodyRef = React28.useRef(null);
|
|
8093
8149
|
const headerRef = React28.useRef(null);
|
|
@@ -8556,7 +8612,13 @@ function CalendarTimeline({
|
|
|
8556
8612
|
role: "button",
|
|
8557
8613
|
tabIndex: 0,
|
|
8558
8614
|
"aria-label": aria,
|
|
8559
|
-
onClick: () =>
|
|
8615
|
+
onClick: () => {
|
|
8616
|
+
onEventClick?.(ev);
|
|
8617
|
+
if (effectiveEnableEventSheet) {
|
|
8618
|
+
setSelectedEventId(ev.id);
|
|
8619
|
+
setEventSheetOpen(true);
|
|
8620
|
+
}
|
|
8621
|
+
},
|
|
8560
8622
|
onDoubleClick: () => onEventDoubleClick?.(ev),
|
|
8561
8623
|
onPointerDown: (e) => onPointerDownEvent(e, ev, "move"),
|
|
8562
8624
|
children: [
|
|
@@ -8622,7 +8684,35 @@ function CalendarTimeline({
|
|
|
8622
8684
|
]
|
|
8623
8685
|
}
|
|
8624
8686
|
)
|
|
8625
|
-
] })
|
|
8687
|
+
] }),
|
|
8688
|
+
effectiveEnableEventSheet && selectedEvent ? /* @__PURE__ */ jsx33(
|
|
8689
|
+
Sheet,
|
|
8690
|
+
{
|
|
8691
|
+
open: activeEventSheetOpen,
|
|
8692
|
+
onOpenChange: setEventSheetOpen,
|
|
8693
|
+
side: "right",
|
|
8694
|
+
size: eventSheetSize,
|
|
8695
|
+
title: selectedEvent.title ?? "Event",
|
|
8696
|
+
description: selectedTimeText || void 0,
|
|
8697
|
+
children: renderEventSheet ? renderEventSheet({
|
|
8698
|
+
event: selectedEvent,
|
|
8699
|
+
resource: selectedResource,
|
|
8700
|
+
close: () => setEventSheetOpen(false),
|
|
8701
|
+
locale: resolvedLocale,
|
|
8702
|
+
timeZone: resolvedTimeZone,
|
|
8703
|
+
view: activeView
|
|
8704
|
+
}) : /* @__PURE__ */ jsxs28("div", { className: "space-y-3", children: [
|
|
8705
|
+
selectedResource?.label ? /* @__PURE__ */ jsxs28("div", { children: [
|
|
8706
|
+
/* @__PURE__ */ jsx33("div", { className: "text-xs text-muted-foreground", children: t("resourcesHeader") }),
|
|
8707
|
+
/* @__PURE__ */ jsx33("div", { className: "font-medium", children: selectedResource.label })
|
|
8708
|
+
] }) : null,
|
|
8709
|
+
/* @__PURE__ */ jsxs28("div", { children: [
|
|
8710
|
+
/* @__PURE__ */ jsx33("div", { className: "text-xs text-muted-foreground", children: "ID" }),
|
|
8711
|
+
/* @__PURE__ */ jsx33("div", { className: "font-mono text-xs break-all", children: selectedEvent.id })
|
|
8712
|
+
] })
|
|
8713
|
+
] })
|
|
8714
|
+
}
|
|
8715
|
+
) : null
|
|
8626
8716
|
]
|
|
8627
8717
|
}
|
|
8628
8718
|
);
|