@mantine/schedule 9.6.3 → 9.7.1
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/cjs/components/DayView/DayView.cjs +46 -31
- package/cjs/components/DayView/DayView.cjs.map +1 -1
- package/cjs/components/DayView/DayView.module.cjs.map +1 -1
- package/cjs/components/MonthView/MonthView.cjs +11 -4
- package/cjs/components/MonthView/MonthView.cjs.map +1 -1
- package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs +10 -8
- package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs.map +1 -1
- package/cjs/components/MonthView/get-month-view-events/reserve-row.cjs +12 -0
- package/cjs/components/MonthView/get-month-view-events/reserve-row.cjs.map +1 -0
- package/cjs/components/ResourcesDayView/ResourcesDayView.cjs +75 -60
- package/cjs/components/ResourcesDayView/ResourcesDayView.cjs.map +1 -1
- package/cjs/components/ResourcesDayView/ResourcesDayView.module.cjs.map +1 -1
- package/cjs/components/ResourcesMonthView/ResourcesMonthView.cjs +19 -7
- package/cjs/components/ResourcesMonthView/ResourcesMonthView.cjs.map +1 -1
- package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs +6 -1
- package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs.map +1 -1
- package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs +85 -58
- package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs.map +1 -1
- package/cjs/components/ResourcesWeekView/ResourcesWeekView.module.cjs.map +1 -1
- package/cjs/components/Schedule/Schedule.cjs +14 -1
- package/cjs/components/Schedule/Schedule.cjs.map +1 -1
- package/cjs/components/ScheduleEvent/ScheduleEvent.module.cjs.map +1 -1
- package/cjs/components/WeekView/WeekView.cjs +70 -46
- package/cjs/components/WeekView/WeekView.cjs.map +1 -1
- package/cjs/components/WeekView/WeekView.module.cjs.map +1 -1
- package/cjs/hooks/use-day-grid-event-resize.cjs +38 -8
- package/cjs/hooks/use-day-grid-event-resize.cjs.map +1 -1
- package/cjs/hooks/use-drag-drop-handlers.cjs +126 -10
- package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -1
- package/cjs/hooks/use-event-resize.cjs +36 -12
- package/cjs/hooks/use-event-resize.cjs.map +1 -1
- package/cjs/hooks/use-horizontal-event-resize.cjs +37 -12
- package/cjs/hooks/use-horizontal-event-resize.cjs.map +1 -1
- package/cjs/hooks/validate-event-resize.cjs +37 -0
- package/cjs/hooks/validate-event-resize.cjs.map +1 -0
- package/cjs/index.cjs +2 -0
- package/cjs/utils/is-event-placement-allowed/is-event-placement-allowed.cjs +52 -0
- package/cjs/utils/is-event-placement-allowed/is-event-placement-allowed.cjs.map +1 -0
- package/esm/components/DayView/DayView.mjs +46 -31
- package/esm/components/DayView/DayView.mjs.map +1 -1
- package/esm/components/DayView/DayView.module.mjs.map +1 -1
- package/esm/components/MonthView/MonthView.mjs +11 -4
- package/esm/components/MonthView/MonthView.mjs.map +1 -1
- package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs +10 -8
- package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs.map +1 -1
- package/esm/components/MonthView/get-month-view-events/reserve-row.mjs +12 -0
- package/esm/components/MonthView/get-month-view-events/reserve-row.mjs.map +1 -0
- package/esm/components/ResourcesDayView/ResourcesDayView.mjs +75 -60
- package/esm/components/ResourcesDayView/ResourcesDayView.mjs.map +1 -1
- package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs.map +1 -1
- package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs +19 -7
- package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs.map +1 -1
- package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs +6 -1
- package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs.map +1 -1
- package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs +85 -58
- package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs.map +1 -1
- package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs.map +1 -1
- package/esm/components/Schedule/Schedule.mjs +14 -1
- package/esm/components/Schedule/Schedule.mjs.map +1 -1
- package/esm/components/ScheduleEvent/ScheduleEvent.module.mjs.map +1 -1
- package/esm/components/WeekView/WeekView.mjs +70 -46
- package/esm/components/WeekView/WeekView.mjs.map +1 -1
- package/esm/components/WeekView/WeekView.module.mjs.map +1 -1
- package/esm/hooks/use-day-grid-event-resize.mjs +38 -8
- package/esm/hooks/use-day-grid-event-resize.mjs.map +1 -1
- package/esm/hooks/use-drag-drop-handlers.mjs +126 -10
- package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
- package/esm/hooks/use-event-resize.mjs +36 -12
- package/esm/hooks/use-event-resize.mjs.map +1 -1
- package/esm/hooks/use-horizontal-event-resize.mjs +37 -12
- package/esm/hooks/use-horizontal-event-resize.mjs.map +1 -1
- package/esm/hooks/validate-event-resize.mjs +37 -0
- package/esm/hooks/validate-event-resize.mjs.map +1 -0
- package/esm/index.mjs +2 -1
- package/esm/utils/is-event-placement-allowed/is-event-placement-allowed.mjs +50 -0
- package/esm/utils/is-event-placement-allowed/is-event-placement-allowed.mjs.map +1 -0
- package/lib/components/DayView/DayView.d.ts +11 -1
- package/lib/components/MonthView/MonthView.d.ts +9 -1
- package/lib/components/MonthView/get-month-view-events/reserve-row.d.ts +7 -0
- package/lib/components/ResourcesDayView/ResourcesDayView.d.ts +11 -1
- package/lib/components/ResourcesMonthView/ResourcesMonthView.d.ts +11 -1
- package/lib/components/ResourcesSchedule/ResourcesSchedule.d.ts +12 -2
- package/lib/components/ResourcesWeekView/ResourcesWeekView.d.ts +11 -1
- package/lib/components/Schedule/Schedule.d.ts +12 -2
- package/lib/components/WeekView/WeekView.d.ts +11 -1
- package/lib/hooks/use-day-grid-event-resize.d.ts +4 -2
- package/lib/hooks/use-drag-drop-handlers.d.ts +17 -1
- package/lib/hooks/use-event-resize.d.ts +4 -2
- package/lib/hooks/use-horizontal-event-resize.d.ts +4 -2
- package/lib/hooks/validate-event-resize.d.ts +33 -0
- package/lib/types.d.ts +65 -0
- package/lib/utils/index.d.ts +2 -0
- package/lib/utils/is-event-placement-allowed/is-event-placement-allowed.d.ts +22 -0
- package/package.json +6 -6
- package/styles.css +29 -0
- package/styles.layer.css +29 -0
- package/cjs/components/MonthView/get-month-view-events/find-available-row.cjs +0 -18
- package/cjs/components/MonthView/get-month-view-events/find-available-row.cjs.map +0 -1
- package/esm/components/MonthView/get-month-view-events/find-available-row.mjs +0 -16
- package/esm/components/MonthView/get-month-view-events/find-available-row.mjs.map +0 -1
- package/lib/components/MonthView/get-month-view-events/find-available-row.d.ts +0 -10
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { isEventPlacementAllowed } from "../utils/is-event-placement-allowed/is-event-placement-allowed.mjs";
|
|
3
|
+
//#region packages/@mantine/schedule/src/hooks/validate-event-resize.ts
|
|
4
|
+
function validateEventResize({ event, start, end, edge, events, preventEventOverlap, canResizeEventTo, resourceId }) {
|
|
5
|
+
const { allowed, conflicts } = isEventPlacementAllowed({
|
|
6
|
+
event,
|
|
7
|
+
start,
|
|
8
|
+
end,
|
|
9
|
+
events: events || [],
|
|
10
|
+
preventEventOverlap,
|
|
11
|
+
resourceId
|
|
12
|
+
});
|
|
13
|
+
if (!allowed) return {
|
|
14
|
+
valid: false,
|
|
15
|
+
conflicts,
|
|
16
|
+
reason: "overlap"
|
|
17
|
+
};
|
|
18
|
+
if (canResizeEventTo && canResizeEventTo({
|
|
19
|
+
event,
|
|
20
|
+
start,
|
|
21
|
+
end,
|
|
22
|
+
edge
|
|
23
|
+
}) === false) return {
|
|
24
|
+
valid: false,
|
|
25
|
+
conflicts: [],
|
|
26
|
+
reason: "rejected"
|
|
27
|
+
};
|
|
28
|
+
return {
|
|
29
|
+
valid: true,
|
|
30
|
+
conflicts: [],
|
|
31
|
+
reason: null
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { validateEventResize };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=validate-event-resize.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-event-resize.mjs","names":[],"sources":["../../src/hooks/validate-event-resize.ts"],"sourcesContent":["import {\n DateTimeStringValue,\n PreventEventOverlap,\n ScheduleCanResizeEventToData,\n ScheduleEventData,\n} from '../types';\nimport { isEventPlacementAllowed } from '../utils/is-event-placement-allowed/is-event-placement-allowed';\n\nexport interface EventResizeValidationOptions {\n /** Events the candidate range is checked against when `preventEventOverlap` is set */\n events?: ScheduleEventData[];\n\n /** If set, resizes that would make the event overlap another event are rejected */\n preventEventOverlap?: PreventEventOverlap;\n\n /** Called on every pointer move to compute live feedback and again before the resize is committed, return `false` to reject the new size */\n canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;\n\n /** Called when a resize is rejected */\n onEventPlacementRejected?: (data: {\n action: 'resize';\n event: ScheduleEventData;\n start: DateTimeStringValue;\n end: DateTimeStringValue;\n edge: 'start' | 'end';\n resourceId?: string | number;\n conflicts: ScheduleEventData[];\n reason: 'overlap' | 'rejected';\n }) => void;\n}\n\nexport interface ValidateEventResizeInput extends EventResizeValidationOptions {\n event: ScheduleEventData;\n start: DateTimeStringValue;\n end: DateTimeStringValue;\n edge: 'start' | 'end';\n resourceId?: string | number;\n}\n\nexport interface ValidateEventResizeResult {\n valid: boolean;\n conflicts: ScheduleEventData[];\n reason: 'overlap' | 'rejected' | null;\n}\n\nexport function validateEventResize({\n event,\n start,\n end,\n edge,\n events,\n preventEventOverlap,\n canResizeEventTo,\n resourceId,\n}: ValidateEventResizeInput): ValidateEventResizeResult {\n const { allowed, conflicts } = isEventPlacementAllowed({\n event,\n start,\n end,\n events: events || [],\n preventEventOverlap,\n resourceId,\n });\n\n if (!allowed) {\n return { valid: false, conflicts, reason: 'overlap' };\n }\n\n if (canResizeEventTo && canResizeEventTo({ event, start, end, edge }) === false) {\n return { valid: false, conflicts: [], reason: 'rejected' };\n }\n\n return { valid: true, conflicts: [], reason: null };\n}\n"],"mappings":";;;AA6CA,SAAgB,oBAAoB,EAClC,OACA,OACA,KACA,MACA,QACA,qBACA,kBACA,cACsD;CACtD,MAAM,EAAE,SAAS,cAAc,wBAAwB;EACrD;EACA;EACA;EACA,QAAQ,UAAU,CAAC;EACnB;EACA;CACF,CAAC;CAED,IAAI,CAAC,SACH,OAAO;EAAE,OAAO;EAAO;EAAW,QAAQ;CAAU;CAGtD,IAAI,oBAAoB,iBAAiB;EAAE;EAAO;EAAO;EAAK;CAAK,CAAC,MAAM,OACxE,OAAO;EAAE,OAAO;EAAO,WAAW,CAAC;EAAG,QAAQ;CAAW;CAG3D,OAAO;EAAE,OAAO;EAAM,WAAW,CAAC;EAAG,QAAQ;CAAK;AACpD"}
|
package/esm/index.mjs
CHANGED
|
@@ -43,6 +43,7 @@ import { getIndexFromDragPoint } from "./utils/get-index-from-drag-point/get-ind
|
|
|
43
43
|
import { getDayRelativePercent } from "./utils/get-day-relative-percent/get-day-relative-percent.mjs";
|
|
44
44
|
import { getOverlapClusters } from "./utils/get-overlap-clusters/get-overlap-clusters.mjs";
|
|
45
45
|
import { applyCascadeLayout } from "./utils/apply-cascade-layout/apply-cascade-layout.mjs";
|
|
46
|
+
import { isEventPlacementAllowed } from "./utils/is-event-placement-allowed/is-event-placement-allowed.mjs";
|
|
46
47
|
import { AgendaView } from "./components/AgendaView/AgendaView.mjs";
|
|
47
48
|
import { CurrentTimeIndicator } from "./components/CurrentTimeIndicator/CurrentTimeIndicator.mjs";
|
|
48
49
|
import { DragContext } from "./components/DragContext/DragContext.mjs";
|
|
@@ -60,4 +61,4 @@ import { ResourcesDayView } from "./components/ResourcesDayView/ResourcesDayView
|
|
|
60
61
|
import { ResourcesWeekView } from "./components/ResourcesWeekView/ResourcesWeekView.mjs";
|
|
61
62
|
import { ResourcesMonthView } from "./components/ResourcesMonthView/ResourcesMonthView.mjs";
|
|
62
63
|
import { ResourcesSchedule } from "./components/ResourcesSchedule/ResourcesSchedule.mjs";
|
|
63
|
-
export { AgendaView, CurrentTimeIndicator, DEFAULT_SCHEDULE_LABELS, DayView, DragContext, MobileMonthView, MonthView, MoreEvents, ResourcesDayView, ResourcesMonthView, ResourcesSchedule, ResourcesWeekView, Schedule, ScheduleBackgroundEvent, ScheduleEvent, ScheduleHeader, WeekView, YearView, applyCascadeLayout, calculateDropTime, calculateMonthDropDate, clampIntervalMinutes, expandRecurringEvents, formatDate, getBusinessHoursMod, getCurrentTimePosition, getDayPosition, getDayRelativePercent, getDayTimeIntervals, getEndOfWeek, getGroupToResourceIdMap, getIndexFromDragPoint, getLabel, getMonthDays, getMonthRange, getMonthsByQuarter, getMonthsList, getOrderedResources, getOverlapClusters, getStartOfWeek, getTimeAxisEventStyle, getVisibleEvents, getWeekDays, getWeekNumber, getWeekdaysNames, getYearsList, handleResourcesGridKeyDown, isAfterMinDate, isAllDayEvent, isBeforeMaxDate, isEventInTimeRange, isEventsOverlap, isInTimeRange, isMultidayEvent, isSameMonth, isWithinWeek, nextWeek, parseTimeString, previousWeek, sortEvents, toDateString, toTimeString, validateEvent };
|
|
64
|
+
export { AgendaView, CurrentTimeIndicator, DEFAULT_SCHEDULE_LABELS, DayView, DragContext, MobileMonthView, MonthView, MoreEvents, ResourcesDayView, ResourcesMonthView, ResourcesSchedule, ResourcesWeekView, Schedule, ScheduleBackgroundEvent, ScheduleEvent, ScheduleHeader, WeekView, YearView, applyCascadeLayout, calculateDropTime, calculateMonthDropDate, clampIntervalMinutes, expandRecurringEvents, formatDate, getBusinessHoursMod, getCurrentTimePosition, getDayPosition, getDayRelativePercent, getDayTimeIntervals, getEndOfWeek, getGroupToResourceIdMap, getIndexFromDragPoint, getLabel, getMonthDays, getMonthRange, getMonthsByQuarter, getMonthsList, getOrderedResources, getOverlapClusters, getStartOfWeek, getTimeAxisEventStyle, getVisibleEvents, getWeekDays, getWeekNumber, getWeekdaysNames, getYearsList, handleResourcesGridKeyDown, isAfterMinDate, isAllDayEvent, isBeforeMaxDate, isEventInTimeRange, isEventPlacementAllowed, isEventsOverlap, isInTimeRange, isMultidayEvent, isSameMonth, isWithinWeek, nextWeek, parseTimeString, previousWeek, sortEvents, toDateString, toTimeString, validateEvent };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { isEventsOverlap } from "../is-events-overlap/is-events-overlap.mjs";
|
|
3
|
+
import dayjs from "dayjs";
|
|
4
|
+
//#region packages/@mantine/schedule/src/utils/is-event-placement-allowed/is-event-placement-allowed.ts
|
|
5
|
+
function isSameEvent(event, other) {
|
|
6
|
+
if (event.id === other.id) return true;
|
|
7
|
+
const eventSeriesId = event.recurringEventId ?? event.recurringInstance?.recurringEventId;
|
|
8
|
+
const otherSeriesId = other.recurringEventId ?? other.recurringInstance?.recurringEventId;
|
|
9
|
+
if (eventSeriesId === void 0 || otherSeriesId === void 0) return false;
|
|
10
|
+
const eventOccurrenceId = event.recurrenceId ?? event.recurringInstance?.recurrenceId;
|
|
11
|
+
const otherOccurrenceId = other.recurrenceId ?? other.recurringInstance?.recurrenceId;
|
|
12
|
+
return eventSeriesId === otherSeriesId && eventOccurrenceId !== void 0 && eventOccurrenceId === otherOccurrenceId;
|
|
13
|
+
}
|
|
14
|
+
function isMidnight(value) {
|
|
15
|
+
return value.hour() === 0 && value.minute() === 0 && value.second() === 0;
|
|
16
|
+
}
|
|
17
|
+
function spansWholeDays(event) {
|
|
18
|
+
const start = dayjs(event.start);
|
|
19
|
+
const end = dayjs(event.end);
|
|
20
|
+
if (!isMidnight(start)) return false;
|
|
21
|
+
return isMidnight(end) || end.hour() === 23 && end.minute() === 59 && end.second() === 59;
|
|
22
|
+
}
|
|
23
|
+
function isEventPlacementAllowed({ event, start, end, events, preventEventOverlap, resourceId }) {
|
|
24
|
+
if (!preventEventOverlap) return {
|
|
25
|
+
allowed: true,
|
|
26
|
+
conflicts: []
|
|
27
|
+
};
|
|
28
|
+
const candidate = {
|
|
29
|
+
...event,
|
|
30
|
+
start,
|
|
31
|
+
end,
|
|
32
|
+
...resourceId !== void 0 ? { resourceId } : {}
|
|
33
|
+
};
|
|
34
|
+
const candidateIsAllDay = spansWholeDays(candidate);
|
|
35
|
+
const conflicts = events.filter((other) => {
|
|
36
|
+
if (other.display === "background" || isSameEvent(event, other)) return false;
|
|
37
|
+
if (resourceId !== void 0 && other.resourceId !== resourceId) return false;
|
|
38
|
+
if (spansWholeDays(other) !== candidateIsAllDay) return false;
|
|
39
|
+
if (!isEventsOverlap(other, candidate)) return false;
|
|
40
|
+
return typeof preventEventOverlap === "function" ? preventEventOverlap(other, candidate) : true;
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
allowed: conflicts.length === 0,
|
|
44
|
+
conflicts
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//#endregion
|
|
48
|
+
export { isEventPlacementAllowed };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=is-event-placement-allowed.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-event-placement-allowed.mjs","names":[],"sources":["../../../src/utils/is-event-placement-allowed/is-event-placement-allowed.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { DateTimeStringValue, PreventEventOverlap, ScheduleEventData } from '../../types';\nimport { isEventsOverlap } from '../is-events-overlap/is-events-overlap';\n\nexport interface IsEventPlacementAllowedInput {\n /** Event that is being moved or resized */\n event: ScheduleEventData;\n\n /** Candidate start of the event */\n start: DateTimeStringValue;\n\n /** Candidate end of the event */\n end: DateTimeStringValue;\n\n /** Events the candidate range is checked against */\n events: ScheduleEventData[];\n\n /** If set, placements that overlap another event are rejected */\n preventEventOverlap?: PreventEventOverlap;\n\n /** Target resource, limits the check to events of that resource */\n resourceId?: string | number;\n}\n\nexport interface IsEventPlacementAllowedResult {\n /** True if the candidate range does not conflict with any event */\n allowed: boolean;\n\n /** Events the candidate range collided with */\n conflicts: ScheduleEventData[];\n}\n\nfunction isSameEvent(event: ScheduleEventData, other: ScheduleEventData) {\n if (event.id === other.id) {\n return true;\n }\n\n const eventSeriesId = event.recurringEventId ?? event.recurringInstance?.recurringEventId;\n const otherSeriesId = other.recurringEventId ?? other.recurringInstance?.recurringEventId;\n\n if (eventSeriesId === undefined || otherSeriesId === undefined) {\n return false;\n }\n\n const eventOccurrenceId = event.recurrenceId ?? event.recurringInstance?.recurrenceId;\n const otherOccurrenceId = other.recurrenceId ?? other.recurringInstance?.recurrenceId;\n\n return (\n eventSeriesId === otherSeriesId &&\n eventOccurrenceId !== undefined &&\n eventOccurrenceId === otherOccurrenceId\n );\n}\n\nfunction isMidnight(value: dayjs.Dayjs) {\n return value.hour() === 0 && value.minute() === 0 && value.second() === 0;\n}\n\nfunction spansWholeDays(event: ScheduleEventData) {\n const start = dayjs(event.start);\n const end = dayjs(event.end);\n\n if (!isMidnight(start)) {\n return false;\n }\n\n return isMidnight(end) || (end.hour() === 23 && end.minute() === 59 && end.second() === 59);\n}\n\nexport function isEventPlacementAllowed({\n event,\n start,\n end,\n events,\n preventEventOverlap,\n resourceId,\n}: IsEventPlacementAllowedInput): IsEventPlacementAllowedResult {\n if (!preventEventOverlap) {\n return { allowed: true, conflicts: [] };\n }\n\n const candidate = {\n ...event,\n start,\n end,\n ...(resourceId !== undefined ? { resourceId } : {}),\n } as ScheduleEventData;\n const candidateIsAllDay = spansWholeDays(candidate);\n const conflicts = events.filter((other) => {\n if (other.display === 'background' || isSameEvent(event, other)) {\n return false;\n }\n\n if (resourceId !== undefined && other.resourceId !== resourceId) {\n return false;\n }\n\n if (spansWholeDays(other) !== candidateIsAllDay) {\n return false;\n }\n\n if (!isEventsOverlap(other, candidate)) {\n return false;\n }\n\n return typeof preventEventOverlap === 'function' ? preventEventOverlap(other, candidate) : true;\n });\n\n return { allowed: conflicts.length === 0, conflicts };\n}\n"],"mappings":";;;;AAgCA,SAAS,YAAY,OAA0B,OAA0B;CACvE,IAAI,MAAM,OAAO,MAAM,IACrB,OAAO;CAGT,MAAM,gBAAgB,MAAM,oBAAoB,MAAM,mBAAmB;CACzE,MAAM,gBAAgB,MAAM,oBAAoB,MAAM,mBAAmB;CAEzE,IAAI,kBAAkB,KAAA,KAAa,kBAAkB,KAAA,GACnD,OAAO;CAGT,MAAM,oBAAoB,MAAM,gBAAgB,MAAM,mBAAmB;CACzE,MAAM,oBAAoB,MAAM,gBAAgB,MAAM,mBAAmB;CAEzE,OACE,kBAAkB,iBAClB,sBAAsB,KAAA,KACtB,sBAAsB;AAE1B;AAEA,SAAS,WAAW,OAAoB;CACtC,OAAO,MAAM,KAAK,MAAM,KAAK,MAAM,OAAO,MAAM,KAAK,MAAM,OAAO,MAAM;AAC1E;AAEA,SAAS,eAAe,OAA0B;CAChD,MAAM,QAAQ,MAAM,MAAM,KAAK;CAC/B,MAAM,MAAM,MAAM,MAAM,GAAG;CAE3B,IAAI,CAAC,WAAW,KAAK,GACnB,OAAO;CAGT,OAAO,WAAW,GAAG,KAAM,IAAI,KAAK,MAAM,MAAM,IAAI,OAAO,MAAM,MAAM,IAAI,OAAO,MAAM;AAC1F;AAEA,SAAgB,wBAAwB,EACtC,OACA,OACA,KACA,QACA,qBACA,cAC8D;CAC9D,IAAI,CAAC,qBACH,OAAO;EAAE,SAAS;EAAM,WAAW,CAAC;CAAE;CAGxC,MAAM,YAAY;EAChB,GAAG;EACH;EACA;EACA,GAAI,eAAe,KAAA,IAAY,EAAE,WAAW,IAAI,CAAC;CACnD;CACA,MAAM,oBAAoB,eAAe,SAAS;CAClD,MAAM,YAAY,OAAO,QAAQ,UAAU;EACzC,IAAI,MAAM,YAAY,gBAAgB,YAAY,OAAO,KAAK,GAC5D,OAAO;EAGT,IAAI,eAAe,KAAA,KAAa,MAAM,eAAe,YACnD,OAAO;EAGT,IAAI,eAAe,KAAK,MAAM,mBAC5B,OAAO;EAGT,IAAI,CAAC,gBAAgB,OAAO,SAAS,GACnC,OAAO;EAGT,OAAO,OAAO,wBAAwB,aAAa,oBAAoB,OAAO,SAAS,IAAI;CAC7F,CAAC;CAED,OAAO;EAAE,SAAS,UAAU,WAAW;EAAG;CAAU;AACtD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BoxProps, DataAttributes, ElementProps, Factory, MantineRadius, ScrollAreaAutosizeProps, StylesApiProps } from '@mantine/core';
|
|
2
2
|
import { ScheduleLabelsOverride } from '../../labels';
|
|
3
|
-
import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, ScheduleEventData, ScheduleEventOverlapMode, ScheduleMode, ScheduleViewLevel } from '../../types';
|
|
3
|
+
import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, PreventEventOverlap, ScheduleCanDropEventData, ScheduleCanDropExternalEventData, ScheduleCanResizeEventToData, ScheduleEventData, ScheduleEventOverlapMode, ScheduleEventPlacementRejectedData, ScheduleMode, ScheduleViewLevel } from '../../types';
|
|
4
4
|
import { AgendaViewStylesNames } from '../AgendaView/AgendaView';
|
|
5
5
|
import { CurrentTimeIndicatorStylesNames } from '../CurrentTimeIndicator/CurrentTimeIndicator';
|
|
6
6
|
import { MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';
|
|
@@ -128,6 +128,16 @@ export interface DayViewProps extends BoxProps, StylesApiProps<DayViewFactory>,
|
|
|
128
128
|
}) => void;
|
|
129
129
|
/** Function to determine if event can be resized */
|
|
130
130
|
canResizeEvent?: (event: ScheduleEventData) => boolean;
|
|
131
|
+
/** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */
|
|
132
|
+
canDropEvent?: (data: ScheduleCanDropEventData) => boolean;
|
|
133
|
+
/** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */
|
|
134
|
+
canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;
|
|
135
|
+
/** Called on every pointer move while an event is resized to compute live feedback and again before the resize is committed, return `false` to reject the new size. Must be pure and cheap. */
|
|
136
|
+
canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;
|
|
137
|
+
/** If set, drops and resizes that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging and resizing to compute live feedback, it must be pure and cheap. @default false */
|
|
138
|
+
preventEventOverlap?: PreventEventOverlap;
|
|
139
|
+
/** Called when a drop or resize is rejected */
|
|
140
|
+
onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;
|
|
131
141
|
/** Snap step for resizing events, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */
|
|
132
142
|
eventResizeInterval?: number;
|
|
133
143
|
/** Max number of generated recurring instances per recurring series @default 2000 */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BoxProps, DataAttributes, ElementProps, Factory, MantineRadius, ScrollAreaProps, StylesApiProps } from '@mantine/core';
|
|
2
2
|
import { ScheduleLabelsOverride } from '../../labels';
|
|
3
|
-
import { DateLabelFormat, DateStringValue, DateTimeStringValue, DayOfWeek, ScheduleEventData, ScheduleMode, ScheduleViewLevel } from '../../types';
|
|
3
|
+
import { DateLabelFormat, DateStringValue, DateTimeStringValue, DayOfWeek, PreventEventOverlap, ScheduleCanDropEventData, ScheduleCanDropExternalEventData, ScheduleEventData, ScheduleEventPlacementRejectedData, ScheduleMode, ScheduleViewLevel } from '../../types';
|
|
4
4
|
import { AgendaViewStylesNames } from '../AgendaView/AgendaView';
|
|
5
5
|
import { MoreEventsProps } from '../MoreEvents/MoreEvents';
|
|
6
6
|
import { RenderEvent, RenderEventBody } from '../ScheduleEvent/ScheduleEvent';
|
|
@@ -80,6 +80,14 @@ export interface MonthViewProps extends BoxProps, StylesApiProps<MonthViewFactor
|
|
|
80
80
|
}) => void;
|
|
81
81
|
/** Function to determine if event can be dragged */
|
|
82
82
|
canDragEvent?: (event: ScheduleEventData) => boolean;
|
|
83
|
+
/** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */
|
|
84
|
+
canDropEvent?: (data: ScheduleCanDropEventData) => boolean;
|
|
85
|
+
/** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */
|
|
86
|
+
canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;
|
|
87
|
+
/** If set, drops that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging to compute live feedback, it must be pure and cheap. @default false */
|
|
88
|
+
preventEventOverlap?: PreventEventOverlap;
|
|
89
|
+
/** Called when a drop is rejected */
|
|
90
|
+
onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;
|
|
83
91
|
/** Called when any event drag starts */
|
|
84
92
|
onEventDragStart?: (event: ScheduleEventData) => void;
|
|
85
93
|
/** Called when any event drag ends */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BoxProps, DataAttributes, ElementProps, Factory, MantineRadius, ScrollAreaProps, StylesApiProps } from '@mantine/core';
|
|
2
2
|
import { ScheduleLabelsOverride } from '../../labels';
|
|
3
|
-
import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, ScheduleEventData, ScheduleMode, ScheduleResourceData, ScheduleResourceGroup, ScheduleViewLevel } from '../../types';
|
|
3
|
+
import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, PreventEventOverlap, ScheduleCanDropEventData, ScheduleCanDropExternalEventData, ScheduleCanResizeEventToData, ScheduleEventData, ScheduleEventPlacementRejectedData, ScheduleMode, ScheduleResourceData, ScheduleResourceGroup, ScheduleViewLevel } from '../../types';
|
|
4
4
|
import { MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';
|
|
5
5
|
import { RenderEvent, RenderEventBody } from '../ScheduleEvent/ScheduleEvent';
|
|
6
6
|
import { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';
|
|
@@ -135,6 +135,16 @@ export interface ResourcesDayViewProps extends BoxProps, StylesApiProps<Resource
|
|
|
135
135
|
}) => void;
|
|
136
136
|
/** Function to determine if event can be resized */
|
|
137
137
|
canResizeEvent?: (event: ScheduleEventData) => boolean;
|
|
138
|
+
/** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */
|
|
139
|
+
canDropEvent?: (data: ScheduleCanDropEventData) => boolean;
|
|
140
|
+
/** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */
|
|
141
|
+
canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;
|
|
142
|
+
/** Called on every pointer move while an event is resized to compute live feedback and again before the resize is committed, return `false` to reject the new size. Must be pure and cheap. */
|
|
143
|
+
canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;
|
|
144
|
+
/** If set, drops and resizes that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging and resizing to compute live feedback, it must be pure and cheap. @default false */
|
|
145
|
+
preventEventOverlap?: PreventEventOverlap;
|
|
146
|
+
/** Called when a drop or resize is rejected */
|
|
147
|
+
onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;
|
|
138
148
|
/** Snap step for resizing events, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */
|
|
139
149
|
eventResizeInterval?: number;
|
|
140
150
|
/** Max number of generated recurring instances per recurring series @default 2000 */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BoxProps, DataAttributes, ElementProps, Factory, MantineRadius, ScrollAreaProps, StylesApiProps } from '@mantine/core';
|
|
2
2
|
import { ScheduleLabelsOverride } from '../../labels';
|
|
3
|
-
import { DateLabelFormat, DateStringValue, DateTimeStringValue, DayOfWeek, ScheduleEventData, ScheduleMode, ScheduleResourceData, ScheduleResourceGroup, ScheduleViewLevel } from '../../types';
|
|
3
|
+
import { DateLabelFormat, DateStringValue, DateTimeStringValue, DayOfWeek, PreventEventOverlap, ScheduleCanDropEventData, ScheduleCanDropExternalEventData, ScheduleCanResizeEventToData, ScheduleEventData, ScheduleEventPlacementRejectedData, ScheduleMode, ScheduleResourceData, ScheduleResourceGroup, ScheduleViewLevel } from '../../types';
|
|
4
4
|
import { MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';
|
|
5
5
|
import { RenderEvent, RenderEventBody } from '../ScheduleEvent/ScheduleEvent';
|
|
6
6
|
import { MonthYearSelectProps } from '../ScheduleHeader/MonthYearSelect/MonthYearSelect';
|
|
@@ -97,6 +97,16 @@ export interface ResourcesMonthViewProps extends BoxProps, StylesApiProps<Resour
|
|
|
97
97
|
}) => void;
|
|
98
98
|
/** Function to determine if event can be resized */
|
|
99
99
|
canResizeEvent?: (event: ScheduleEventData) => boolean;
|
|
100
|
+
/** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */
|
|
101
|
+
canDropEvent?: (data: ScheduleCanDropEventData) => boolean;
|
|
102
|
+
/** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */
|
|
103
|
+
canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;
|
|
104
|
+
/** Called on every pointer move while an event is resized to compute live feedback and again before the resize is committed, return `false` to reject the new size. Must be pure and cheap. */
|
|
105
|
+
canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;
|
|
106
|
+
/** If set, drops and resizes that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging and resizing to compute live feedback, it must be pure and cheap. @default false */
|
|
107
|
+
preventEventOverlap?: PreventEventOverlap;
|
|
108
|
+
/** Called when a drop or resize is rejected */
|
|
109
|
+
onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;
|
|
100
110
|
/** Called when event is clicked */
|
|
101
111
|
onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;
|
|
102
112
|
/** If set, enables drag-to-select day ranges @default false */
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { BoxProps, ElementProps, Factory, MantineRadius, StylesApiProps } from '@mantine/core';
|
|
2
2
|
import { ScheduleLabelsOverride } from '../../labels';
|
|
3
|
-
import { DateStringValue, DateTimeStringValue, ScheduleEventData, ScheduleMode, ScheduleResourceData } from '../../types';
|
|
3
|
+
import { DateStringValue, DateTimeStringValue, PreventEventOverlap, ScheduleCanDropEventData, ScheduleCanDropExternalEventData, ScheduleCanResizeEventToData, ScheduleEventData, ScheduleEventPlacementRejectedData, ScheduleMode, ScheduleResourceData } from '../../types';
|
|
4
4
|
import { ResourcesDayViewProps, ResourcesDayViewStylesNames } from '../ResourcesDayView/ResourcesDayView';
|
|
5
5
|
import { ResourcesMonthViewProps, ResourcesMonthViewStylesNames } from '../ResourcesMonthView/ResourcesMonthView';
|
|
6
6
|
import { ResourcesWeekViewProps, ResourcesWeekViewStylesNames } from '../ResourcesWeekView/ResourcesWeekView';
|
|
7
7
|
import { RenderEventBody } from '../ScheduleEvent/ScheduleEvent';
|
|
8
8
|
export type ResourcesScheduleStylesNames = 'root' | ResourcesDayViewStylesNames | ResourcesWeekViewStylesNames | ResourcesMonthViewStylesNames;
|
|
9
9
|
export type ResourcesScheduleViewLevel = 'day' | 'week' | 'month';
|
|
10
|
-
type ResourcesScheduleCommonProps = 'date' | 'onDateChange' | 'resources' | 'events' | 'locale' | 'radius' | 'labels' | 'renderEventBody' | 'renderResourceLabel' | 'withEventsDragAndDrop' | 'onEventDrop' | 'canDragEvent' | 'onEventDragStart' | 'onEventDragEnd' | 'onTimeSlotClick' | 'onEventClick' | 'onDayClick' | 'withDragSlotSelect' | 'onSlotDragEnd' | 'view' | 'onViewChange' | 'mode' | 'onExternalEventDrop' | 'withEventResize' | 'onEventResize' | 'canResizeEvent' | 'recurrenceExpansionLimit' | 'withInteractiveBackgroundEvents';
|
|
10
|
+
type ResourcesScheduleCommonProps = 'date' | 'onDateChange' | 'resources' | 'events' | 'locale' | 'radius' | 'labels' | 'renderEventBody' | 'renderResourceLabel' | 'withEventsDragAndDrop' | 'onEventDrop' | 'canDragEvent' | 'onEventDragStart' | 'onEventDragEnd' | 'onTimeSlotClick' | 'onEventClick' | 'onDayClick' | 'withDragSlotSelect' | 'onSlotDragEnd' | 'view' | 'onViewChange' | 'mode' | 'onExternalEventDrop' | 'withEventResize' | 'onEventResize' | 'canResizeEvent' | 'canDropEvent' | 'canDropExternalEvent' | 'canResizeEventTo' | 'preventEventOverlap' | 'onEventPlacementRejected' | 'recurrenceExpansionLimit' | 'withInteractiveBackgroundEvents';
|
|
11
11
|
type ResourcesScheduleViewProps<T> = Partial<Omit<T, ResourcesScheduleCommonProps>>;
|
|
12
12
|
export interface ResourcesScheduleProps extends BoxProps, StylesApiProps<ResourcesScheduleFactory>, ElementProps<'div'> {
|
|
13
13
|
__staticSelector?: string;
|
|
@@ -95,6 +95,16 @@ export interface ResourcesScheduleProps extends BoxProps, StylesApiProps<Resourc
|
|
|
95
95
|
}) => void;
|
|
96
96
|
/** Function to determine if event can be resized */
|
|
97
97
|
canResizeEvent?: (event: ScheduleEventData) => boolean;
|
|
98
|
+
/** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */
|
|
99
|
+
canDropEvent?: (data: ScheduleCanDropEventData) => boolean;
|
|
100
|
+
/** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */
|
|
101
|
+
canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;
|
|
102
|
+
/** Called on every pointer move while an event is resized to compute live feedback and again before the resize is committed, return `false` to reject the new size. Must be pure and cheap. */
|
|
103
|
+
canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;
|
|
104
|
+
/** If set, drops and resizes that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging and resizing to compute live feedback, it must be pure and cheap. @default false */
|
|
105
|
+
preventEventOverlap?: PreventEventOverlap;
|
|
106
|
+
/** Called when a drop or resize is rejected */
|
|
107
|
+
onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;
|
|
98
108
|
/** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Applies to `day` and `week` views only – `ResourcesMonthView` does not render background events separately. Combined with `withEventResize`, timed background events can also be resized by dragging their edges. @default false */
|
|
99
109
|
withInteractiveBackgroundEvents?: boolean;
|
|
100
110
|
/** Max number of generated recurring instances @default 2000 */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BoxProps, DataAttributes, ElementProps, Factory, MantineRadius, ScrollAreaProps, StylesApiProps } from '@mantine/core';
|
|
2
2
|
import { ScheduleLabelsOverride } from '../../labels';
|
|
3
|
-
import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, DayOfWeek, ScheduleEventData, ScheduleMode, ScheduleResourceData, ScheduleResourceGroup, ScheduleViewLevel } from '../../types';
|
|
3
|
+
import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, DayOfWeek, PreventEventOverlap, ScheduleCanDropEventData, ScheduleCanDropExternalEventData, ScheduleCanResizeEventToData, ScheduleEventData, ScheduleEventPlacementRejectedData, ScheduleMode, ScheduleResourceData, ScheduleResourceGroup, ScheduleViewLevel } from '../../types';
|
|
4
4
|
import { MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';
|
|
5
5
|
import { RenderEvent, RenderEventBody } from '../ScheduleEvent/ScheduleEvent';
|
|
6
6
|
import { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';
|
|
@@ -101,6 +101,16 @@ export interface ResourcesWeekViewProps extends BoxProps, StylesApiProps<Resourc
|
|
|
101
101
|
}) => void;
|
|
102
102
|
/** Function to determine if event can be resized */
|
|
103
103
|
canResizeEvent?: (event: ScheduleEventData) => boolean;
|
|
104
|
+
/** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */
|
|
105
|
+
canDropEvent?: (data: ScheduleCanDropEventData) => boolean;
|
|
106
|
+
/** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */
|
|
107
|
+
canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;
|
|
108
|
+
/** Called on every pointer move while an event is resized to compute live feedback and again before the resize is committed, return `false` to reject the new size. Must be pure and cheap. */
|
|
109
|
+
canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;
|
|
110
|
+
/** If set, drops and resizes that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging and resizing to compute live feedback, it must be pure and cheap. @default false */
|
|
111
|
+
preventEventOverlap?: PreventEventOverlap;
|
|
112
|
+
/** Called when a drop or resize is rejected */
|
|
113
|
+
onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;
|
|
104
114
|
/** Snap step for resizing events, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */
|
|
105
115
|
eventResizeInterval?: number;
|
|
106
116
|
recurrenceExpansionLimit?: number;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BoxProps, ElementProps, Factory, MantineRadius, StylesApiProps } from '@mantine/core';
|
|
2
2
|
import { ScheduleLabelsOverride } from '../../labels';
|
|
3
|
-
import { DateStringValue, DateTimeStringValue, ScheduleEventData, ScheduleMode, ScheduleViewLevel } from '../../types';
|
|
3
|
+
import { DateStringValue, DateTimeStringValue, PreventEventOverlap, ScheduleCanDropEventData, ScheduleCanDropExternalEventData, ScheduleCanResizeEventToData, ScheduleEventData, ScheduleEventPlacementRejectedData, ScheduleMode, ScheduleViewLevel } from '../../types';
|
|
4
4
|
import { DayViewProps, DayViewStylesNames } from '../DayView/DayView';
|
|
5
5
|
import { MobileMonthViewProps, MobileMonthViewStylesNames } from '../MobileMonthView/MobileMonthView';
|
|
6
6
|
import { MonthViewProps, MonthViewStylesNames } from '../MonthView/MonthView';
|
|
@@ -9,7 +9,7 @@ import { WeekViewProps, WeekViewStylesNames } from '../WeekView/WeekView';
|
|
|
9
9
|
import { YearViewProps, YearViewStylesNames } from '../YearView/YearView';
|
|
10
10
|
export type ScheduleStylesNames = 'root' | 'desktopView' | 'mobileView' | DayViewStylesNames | WeekViewStylesNames | MonthViewStylesNames | YearViewStylesNames | MobileMonthViewStylesNames;
|
|
11
11
|
export type ScheduleLayout = 'default' | 'responsive';
|
|
12
|
-
type ScheduleCommonProps = 'date' | 'onDateChange' | 'events' | 'locale' | 'radius' | 'labels' | 'renderEventBody' | 'withEventsDragAndDrop' | 'onEventDrop' | 'canDragEvent' | 'onEventDragStart' | 'onEventDragEnd' | 'onTimeSlotClick' | 'onAllDaySlotClick' | 'onEventClick' | 'onDayClick' | 'onMonthClick' | 'withDragSlotSelect' | 'onSlotDragEnd' | 'view' | 'onViewChange' | 'mode' | 'withAgenda' | 'onExternalEventDrop' | 'withEventResize' | 'onEventResize' | 'canResizeEvent' | 'recurrenceExpansionLimit' | 'withInteractiveBackgroundEvents';
|
|
12
|
+
type ScheduleCommonProps = 'date' | 'onDateChange' | 'events' | 'locale' | 'radius' | 'labels' | 'renderEventBody' | 'withEventsDragAndDrop' | 'onEventDrop' | 'canDragEvent' | 'onEventDragStart' | 'onEventDragEnd' | 'onTimeSlotClick' | 'onAllDaySlotClick' | 'onEventClick' | 'onDayClick' | 'onMonthClick' | 'withDragSlotSelect' | 'onSlotDragEnd' | 'view' | 'onViewChange' | 'mode' | 'withAgenda' | 'onExternalEventDrop' | 'withEventResize' | 'onEventResize' | 'canResizeEvent' | 'canDropEvent' | 'canDropExternalEvent' | 'canResizeEventTo' | 'preventEventOverlap' | 'onEventPlacementRejected' | 'recurrenceExpansionLimit' | 'withInteractiveBackgroundEvents';
|
|
13
13
|
type ScheduleViewProps<T> = Partial<Omit<T, ScheduleCommonProps>>;
|
|
14
14
|
export interface ScheduleProps extends BoxProps, StylesApiProps<ScheduleFactory>, ElementProps<'div'> {
|
|
15
15
|
__staticSelector?: string;
|
|
@@ -84,6 +84,16 @@ export interface ScheduleProps extends BoxProps, StylesApiProps<ScheduleFactory>
|
|
|
84
84
|
}) => void;
|
|
85
85
|
/** Function to determine if event can be resized */
|
|
86
86
|
canResizeEvent?: (event: ScheduleEventData) => boolean;
|
|
87
|
+
/** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */
|
|
88
|
+
canDropEvent?: (data: ScheduleCanDropEventData) => boolean;
|
|
89
|
+
/** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */
|
|
90
|
+
canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;
|
|
91
|
+
/** Called on every pointer move while an event is resized to compute live feedback and again before the resize is committed, return `false` to reject the new size. Must be pure and cheap. */
|
|
92
|
+
canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;
|
|
93
|
+
/** If set, drops and resizes that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging and resizing to compute live feedback, it must be pure and cheap. @default false */
|
|
94
|
+
preventEventOverlap?: PreventEventOverlap;
|
|
95
|
+
/** Called when a drop or resize is rejected */
|
|
96
|
+
onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;
|
|
87
97
|
/** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Applies to `day`, `week` and `month` views only – `YearView` and the `MobileMonthView` used by `layout="responsive"` on small screens do not render background events at all. Combined with `withEventResize`, timed background events in `day` and `week` views can also be resized by dragging their edges. @default false */
|
|
88
98
|
withInteractiveBackgroundEvents?: boolean;
|
|
89
99
|
/** Max number of generated recurring instances per recurring series @default 2000 */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BoxProps, DataAttributes, ElementProps, Factory, MantineRadius, ScrollAreaAutosizeProps, StylesApiProps } from '@mantine/core';
|
|
2
2
|
import { ScheduleLabelsOverride } from '../../labels';
|
|
3
|
-
import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, DayOfWeek, ScheduleEventData, ScheduleEventOverlapMode, ScheduleMode, ScheduleViewLevel } from '../../types';
|
|
3
|
+
import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, DayOfWeek, PreventEventOverlap, ScheduleCanDropEventData, ScheduleCanDropExternalEventData, ScheduleCanResizeEventToData, ScheduleEventData, ScheduleEventOverlapMode, ScheduleEventPlacementRejectedData, ScheduleMode, ScheduleViewLevel } from '../../types';
|
|
4
4
|
import { BusinessHoursValue } from '../../utils';
|
|
5
5
|
import { AgendaViewStylesNames } from '../AgendaView/AgendaView';
|
|
6
6
|
import { CurrentTimeIndicatorStylesNames } from '../CurrentTimeIndicator/CurrentTimeIndicator';
|
|
@@ -144,6 +144,16 @@ export interface WeekViewProps extends BoxProps, StylesApiProps<WeekViewFactory>
|
|
|
144
144
|
}) => void;
|
|
145
145
|
/** Function to determine if event can be resized */
|
|
146
146
|
canResizeEvent?: (event: ScheduleEventData) => boolean;
|
|
147
|
+
/** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */
|
|
148
|
+
canDropEvent?: (data: ScheduleCanDropEventData) => boolean;
|
|
149
|
+
/** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */
|
|
150
|
+
canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;
|
|
151
|
+
/** Called on every pointer move while an event is resized to compute live feedback and again before the resize is committed, return `false` to reject the new size. Must be pure and cheap. */
|
|
152
|
+
canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;
|
|
153
|
+
/** If set, drops and resizes that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging and resizing to compute live feedback, it must be pure and cheap. @default false */
|
|
154
|
+
preventEventOverlap?: PreventEventOverlap;
|
|
155
|
+
/** Called when a drop or resize is rejected */
|
|
156
|
+
onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;
|
|
147
157
|
/** Snap step for resizing events, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */
|
|
148
158
|
eventResizeInterval?: number;
|
|
149
159
|
/** Max number of generated recurring instances per recurring series @default 2000 */
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DateStringValue, DateTimeStringValue, ScheduleEventData, ScheduleMode } from '../types';
|
|
2
2
|
import { MonthResizeEdge } from '../utils/calculate-month-resize-dates/calculate-month-resize-dates';
|
|
3
|
-
|
|
3
|
+
import { EventResizeValidationOptions } from './validate-event-resize';
|
|
4
|
+
export interface UseDayGridEventResizeInput extends EventResizeValidationOptions {
|
|
4
5
|
enabled?: boolean;
|
|
5
6
|
mode?: ScheduleMode;
|
|
6
7
|
onEventResize?: (data: {
|
|
@@ -23,7 +24,7 @@ export interface DayGridResizeStartInput {
|
|
|
23
24
|
* The target day is resolved by hit-testing `cells` with the pointer position, so
|
|
24
25
|
* the hook works for any layout that renders one element per day in a single row.
|
|
25
26
|
*/
|
|
26
|
-
export declare function useDayGridEventResize({ enabled, mode, onEventResize, canResizeEvent, }: UseDayGridEventResizeInput): {
|
|
27
|
+
export declare function useDayGridEventResize({ enabled, mode, onEventResize, canResizeEvent, events, preventEventOverlap, canResizeEventTo, onEventPlacementRejected, }: UseDayGridEventResizeInput): {
|
|
27
28
|
handleResizeStart: ({ event, edge, cells, days, pointerEvent }: DayGridResizeStartInput) => void;
|
|
28
29
|
isResizing: boolean;
|
|
29
30
|
resizingEventId: string | number | null;
|
|
@@ -32,4 +33,5 @@ export declare function useDayGridEventResize({ enabled, mode, onEventResize, ca
|
|
|
32
33
|
previewEnd: string | null;
|
|
33
34
|
isResizableEvent: (event: ScheduleEventData) => boolean;
|
|
34
35
|
wasResizing: () => boolean;
|
|
36
|
+
resizeValid: boolean;
|
|
35
37
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DragContextValue } from '../components/DragContext/DragContext';
|
|
2
|
-
import { DateTimeStringValue, ScheduleEventData, ScheduleMode } from '../types';
|
|
2
|
+
import { DateTimeStringValue, PreventEventOverlap, ScheduleCanDropEventData, ScheduleCanDropExternalEventData, ScheduleEventData, ScheduleEventPlacementRejectedData, ScheduleMode } from '../types';
|
|
3
3
|
export interface DragPreview<T = any> {
|
|
4
4
|
start: DateTimeStringValue;
|
|
5
5
|
end: DateTimeStringValue;
|
|
@@ -33,6 +33,20 @@ export interface UseDragDropHandlersOptions<T = any> {
|
|
|
33
33
|
};
|
|
34
34
|
/** Called when an external item is dropped onto the schedule */
|
|
35
35
|
onExternalDrop?: (e: React.DragEvent, target: T) => void;
|
|
36
|
+
/** Events the candidate range is checked against when `preventEventOverlap` is set */
|
|
37
|
+
events?: ScheduleEventData[];
|
|
38
|
+
/** If set, drops that would make the event overlap another event are rejected */
|
|
39
|
+
preventEventOverlap?: PreventEventOverlap;
|
|
40
|
+
/** Called on every `dragover` to compute live feedback and again before the drop is committed, return `false` to reject the drop */
|
|
41
|
+
canDropEvent?: (data: ScheduleCanDropEventData) => boolean;
|
|
42
|
+
/** Called on every `dragover` of an external item to compute live feedback and again before the drop is committed, return `false` to reject the drop */
|
|
43
|
+
canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;
|
|
44
|
+
/** Called when a drop is rejected */
|
|
45
|
+
onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;
|
|
46
|
+
/** Resolves the target resource from the drop target, used by `Resources*` views */
|
|
47
|
+
getTargetResourceId?: (target: T) => string | number | undefined;
|
|
48
|
+
/** Resolves the datetime an external item would be dropped at, `null` when the target has no datetime */
|
|
49
|
+
getExternalDropDateTime?: (target: T) => DateTimeStringValue | null;
|
|
36
50
|
}
|
|
37
51
|
export interface DragDropHandlers<T = any> {
|
|
38
52
|
/** Context value for DragContext.Provider */
|
|
@@ -57,6 +71,8 @@ export interface DragDropHandlers<T = any> {
|
|
|
57
71
|
dragPreview: DragPreview<T> | null;
|
|
58
72
|
/** Sets the current drag preview */
|
|
59
73
|
setDragPreview: (preview: DragPreview<T> | null) => void;
|
|
74
|
+
/** False while the pointer is over a target that would be rejected */
|
|
75
|
+
dropValid: boolean;
|
|
60
76
|
}
|
|
61
77
|
/**
|
|
62
78
|
* Hook that provides unified drag-drop handlers for Schedule views.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DateTimeStringValue, ScheduleEventData, ScheduleMode } from '../types';
|
|
2
|
+
import { EventResizeValidationOptions } from './validate-event-resize';
|
|
2
3
|
type ResizeEdge = 'top' | 'bottom';
|
|
3
|
-
export interface UseEventResizeInput {
|
|
4
|
+
export interface UseEventResizeInput extends EventResizeValidationOptions {
|
|
4
5
|
enabled?: boolean;
|
|
5
6
|
mode?: ScheduleMode;
|
|
6
7
|
startTime: string;
|
|
@@ -16,7 +17,7 @@ export interface UseEventResizeInput {
|
|
|
16
17
|
canResizeEvent?: (event: ScheduleEventData) => boolean;
|
|
17
18
|
withBackgroundEvents?: boolean;
|
|
18
19
|
}
|
|
19
|
-
export declare function useEventResize({ enabled, mode, startTime, endTime, intervalMinutes, resizeIntervalMinutes, onEventResize, canResizeEvent, withBackgroundEvents, }: UseEventResizeInput): {
|
|
20
|
+
export declare function useEventResize({ enabled, mode, startTime, endTime, intervalMinutes, resizeIntervalMinutes, onEventResize, canResizeEvent, events, preventEventOverlap, canResizeEventTo, onEventPlacementRejected, withBackgroundEvents, }: UseEventResizeInput): {
|
|
20
21
|
handleResizeStart: ({ event, edge, container, originalTop, originalHeight, eventDate, pointerEvent, }: {
|
|
21
22
|
event: ScheduleEventData;
|
|
22
23
|
edge: ResizeEdge;
|
|
@@ -34,5 +35,6 @@ export declare function useEventResize({ enabled, mode, startTime, endTime, inte
|
|
|
34
35
|
} | null;
|
|
35
36
|
isResizableEvent: (event: ScheduleEventData) => boolean;
|
|
36
37
|
wasResizing: () => boolean;
|
|
38
|
+
resizeValid: boolean;
|
|
37
39
|
};
|
|
38
40
|
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DateTimeStringValue, ScheduleEventData, ScheduleMode } from '../types';
|
|
2
|
+
import { EventResizeValidationOptions } from './validate-event-resize';
|
|
2
3
|
type ResizeEdge = 'start' | 'end';
|
|
3
|
-
export interface UseHorizontalEventResizeInput {
|
|
4
|
+
export interface UseHorizontalEventResizeInput extends EventResizeValidationOptions {
|
|
4
5
|
enabled?: boolean;
|
|
5
6
|
mode?: ScheduleMode;
|
|
6
7
|
startTime: string;
|
|
@@ -16,7 +17,7 @@ export interface UseHorizontalEventResizeInput {
|
|
|
16
17
|
canResizeEvent?: (event: ScheduleEventData) => boolean;
|
|
17
18
|
withBackgroundEvents?: boolean;
|
|
18
19
|
}
|
|
19
|
-
export declare function useHorizontalEventResize({ enabled, mode, startTime, endTime, intervalMinutes, resizeIntervalMinutes, onEventResize, canResizeEvent, withBackgroundEvents, }: UseHorizontalEventResizeInput): {
|
|
20
|
+
export declare function useHorizontalEventResize({ enabled, mode, startTime, endTime, intervalMinutes, resizeIntervalMinutes, onEventResize, canResizeEvent, events, preventEventOverlap, canResizeEventTo, onEventPlacementRejected, withBackgroundEvents, }: UseHorizontalEventResizeInput): {
|
|
20
21
|
handleResizeStart: ({ event, edge, container, originalLeft, originalWidth, eventDate, dayIndex, dayCount, pointerEvent, }: {
|
|
21
22
|
event: ScheduleEventData;
|
|
22
23
|
edge: ResizeEdge;
|
|
@@ -37,5 +38,6 @@ export declare function useHorizontalEventResize({ enabled, mode, startTime, end
|
|
|
37
38
|
} | null;
|
|
38
39
|
isResizableEvent: (event: ScheduleEventData) => boolean;
|
|
39
40
|
wasResizing: () => boolean;
|
|
41
|
+
resizeValid: boolean;
|
|
40
42
|
};
|
|
41
43
|
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { DateTimeStringValue, PreventEventOverlap, ScheduleCanResizeEventToData, ScheduleEventData } from '../types';
|
|
2
|
+
export interface EventResizeValidationOptions {
|
|
3
|
+
/** Events the candidate range is checked against when `preventEventOverlap` is set */
|
|
4
|
+
events?: ScheduleEventData[];
|
|
5
|
+
/** If set, resizes that would make the event overlap another event are rejected */
|
|
6
|
+
preventEventOverlap?: PreventEventOverlap;
|
|
7
|
+
/** Called on every pointer move to compute live feedback and again before the resize is committed, return `false` to reject the new size */
|
|
8
|
+
canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;
|
|
9
|
+
/** Called when a resize is rejected */
|
|
10
|
+
onEventPlacementRejected?: (data: {
|
|
11
|
+
action: 'resize';
|
|
12
|
+
event: ScheduleEventData;
|
|
13
|
+
start: DateTimeStringValue;
|
|
14
|
+
end: DateTimeStringValue;
|
|
15
|
+
edge: 'start' | 'end';
|
|
16
|
+
resourceId?: string | number;
|
|
17
|
+
conflicts: ScheduleEventData[];
|
|
18
|
+
reason: 'overlap' | 'rejected';
|
|
19
|
+
}) => void;
|
|
20
|
+
}
|
|
21
|
+
export interface ValidateEventResizeInput extends EventResizeValidationOptions {
|
|
22
|
+
event: ScheduleEventData;
|
|
23
|
+
start: DateTimeStringValue;
|
|
24
|
+
end: DateTimeStringValue;
|
|
25
|
+
edge: 'start' | 'end';
|
|
26
|
+
resourceId?: string | number;
|
|
27
|
+
}
|
|
28
|
+
export interface ValidateEventResizeResult {
|
|
29
|
+
valid: boolean;
|
|
30
|
+
conflicts: ScheduleEventData[];
|
|
31
|
+
reason: 'overlap' | 'rejected' | null;
|
|
32
|
+
}
|
|
33
|
+
export declare function validateEventResize({ event, start, end, edge, events, preventEventOverlap, canResizeEventTo, resourceId, }: ValidateEventResizeInput): ValidateEventResizeResult;
|
package/lib/types.d.ts
CHANGED
|
@@ -160,4 +160,69 @@ export interface DropTarget {
|
|
|
160
160
|
/** Target slot index (for DayView/WeekView) */
|
|
161
161
|
slotIndex?: number;
|
|
162
162
|
}
|
|
163
|
+
/** Controls whether a drop or resize that would overlap another event is rejected */
|
|
164
|
+
export type PreventEventOverlap = boolean | ((stillEvent: ScheduleEventData, movingEvent: ScheduleEventData) => boolean);
|
|
165
|
+
/** Data passed to `canDropEvent` while an event is dragged over a target and again before the drop is committed */
|
|
166
|
+
export interface ScheduleCanDropEventData {
|
|
167
|
+
/** Event that is being dragged */
|
|
168
|
+
event: ScheduleEventData;
|
|
169
|
+
/** Candidate start of the event */
|
|
170
|
+
start: DateTimeStringValue;
|
|
171
|
+
/** Candidate end of the event */
|
|
172
|
+
end: DateTimeStringValue;
|
|
173
|
+
/** Target resource, only in `Resources*` views */
|
|
174
|
+
resourceId?: string | number;
|
|
175
|
+
}
|
|
176
|
+
/** Data passed to `canDropExternalEvent` while an external item is dragged over a target and again before the drop is committed */
|
|
177
|
+
export interface ScheduleCanDropExternalEventData {
|
|
178
|
+
/** Data transfer of the drag event */
|
|
179
|
+
dataTransfer: DataTransfer;
|
|
180
|
+
/** Datetime the external item is dropped at */
|
|
181
|
+
start: DateTimeStringValue;
|
|
182
|
+
/** Target resource, only in `Resources*` views */
|
|
183
|
+
resourceId?: string | number;
|
|
184
|
+
}
|
|
185
|
+
/** Data passed to `canResizeEventTo` on every pointer move while an event is resized and again before the resize is committed */
|
|
186
|
+
export interface ScheduleCanResizeEventToData {
|
|
187
|
+
/** Event that is being resized */
|
|
188
|
+
event: ScheduleEventData;
|
|
189
|
+
/** Candidate start of the event */
|
|
190
|
+
start: DateTimeStringValue;
|
|
191
|
+
/** Candidate end of the event */
|
|
192
|
+
end: DateTimeStringValue;
|
|
193
|
+
/** Edge of the event that is being dragged */
|
|
194
|
+
edge: 'start' | 'end';
|
|
195
|
+
}
|
|
196
|
+
interface ScheduleEventPlacementRejectedBase {
|
|
197
|
+
/** Candidate start of the event, for `external-drop` the datetime the item was dropped at */
|
|
198
|
+
start: DateTimeStringValue;
|
|
199
|
+
/** Candidate end of the event, not present on `external-drop` */
|
|
200
|
+
end: DateTimeStringValue;
|
|
201
|
+
/** Events the placement collided with, empty when the rejection came from a callback */
|
|
202
|
+
conflicts: ScheduleEventData[];
|
|
203
|
+
/** `'overlap'` when `preventEventOverlap` found a conflict, `'rejected'` when a callback returned `false` */
|
|
204
|
+
reason: 'overlap' | 'rejected';
|
|
205
|
+
/** Only in `Resources*` views: the target resource for `drop` and `external-drop`, the resized event resource for `resize` */
|
|
206
|
+
resourceId?: string | number;
|
|
207
|
+
}
|
|
208
|
+
/** Data passed to `onEventPlacementRejected` when a drop, resize or external drop is rejected. External drops have no `end`: the schedule does not know the duration of an external item. */
|
|
209
|
+
export type ScheduleEventPlacementRejectedData = (ScheduleEventPlacementRejectedBase & {
|
|
210
|
+
action: 'drop';
|
|
211
|
+
/** Event that was being dragged */
|
|
212
|
+
event: ScheduleEventData;
|
|
213
|
+
}) | (ScheduleEventPlacementRejectedBase & {
|
|
214
|
+
action: 'resize';
|
|
215
|
+
/** Event that was being resized */
|
|
216
|
+
event: ScheduleEventData;
|
|
217
|
+
/** Edge of the event that was being dragged */
|
|
218
|
+
edge: 'start' | 'end';
|
|
219
|
+
}) | (Omit<ScheduleEventPlacementRejectedBase, 'end'> & {
|
|
220
|
+
action: 'external-drop';
|
|
221
|
+
/** Data transfer of the drag event */
|
|
222
|
+
dataTransfer: DataTransfer;
|
|
223
|
+
/** Always `'rejected'`, `preventEventOverlap` does not apply to external drops */
|
|
224
|
+
reason: 'rejected';
|
|
225
|
+
/** Always empty, external drops carry no duration and are not checked for overlap */
|
|
226
|
+
conflicts: [];
|
|
227
|
+
});
|
|
163
228
|
export {};
|
package/lib/utils/index.d.ts
CHANGED
|
@@ -50,3 +50,5 @@ export { getDayRelativePercent } from './get-day-relative-percent/get-day-relati
|
|
|
50
50
|
export { getOverlapClusters } from './get-overlap-clusters/get-overlap-clusters';
|
|
51
51
|
export { applyCascadeLayout } from './apply-cascade-layout/apply-cascade-layout';
|
|
52
52
|
export type { CascadePositionedEvent } from './apply-cascade-layout/apply-cascade-layout';
|
|
53
|
+
export { isEventPlacementAllowed } from './is-event-placement-allowed/is-event-placement-allowed';
|
|
54
|
+
export type { IsEventPlacementAllowedInput, IsEventPlacementAllowedResult, } from './is-event-placement-allowed/is-event-placement-allowed';
|