@mantine-vue/schedule 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/cjs/index.cjs +2228 -1
  2. package/cjs/index.cjs.map +1 -1
  3. package/esm/index.mjs +2220 -3
  4. package/esm/index.mjs.map +1 -1
  5. package/lib/components/ResourcesDayView/ResourcesDayView.d.ts +346 -0
  6. package/lib/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.d.ts +2 -0
  7. package/lib/components/ResourcesDayView/get-resources-day-view-events/get-resources-day-view-events.d.ts +15 -0
  8. package/lib/components/ResourcesDayView/index.d.ts +3 -0
  9. package/lib/components/ResourcesMonthView/ResourcesMonthView.d.ts +279 -0
  10. package/lib/components/ResourcesMonthView/index.d.ts +1 -0
  11. package/lib/components/ResourcesSchedule/ResourcesSchedule.d.ts +201 -0
  12. package/lib/components/ResourcesSchedule/index.d.ts +1 -0
  13. package/lib/components/ResourcesWeekView/ResourcesWeekView.d.ts +412 -0
  14. package/lib/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.d.ts +21 -0
  15. package/lib/components/ResourcesWeekView/index.d.ts +2 -0
  16. package/lib/hooks/use-horizontal-event-resize.d.ts +200 -0
  17. package/lib/index.d.mts +4 -0
  18. package/lib/index.d.ts +4 -0
  19. package/lib/labels.d.ts +3 -0
  20. package/lib/types.d.ts +15 -0
  21. package/lib/utils/get-group-to-resource-id-map/get-group-to-resource-id-map.d.ts +2 -0
  22. package/lib/utils/get-ordered-resources/get-ordered-resources.d.ts +17 -0
  23. package/lib/utils/handle-resources-grid-key-down/handle-resources-grid-key-down.d.ts +8 -0
  24. package/lib/utils/index.d.ts +5 -0
  25. package/package.json +4 -4
  26. package/styles.css +703 -0
  27. package/styles.layer.css +703 -0
@@ -0,0 +1,200 @@
1
+ import type { EventDropData } from '../component-props';
2
+ import type { DateTimeStringValue, ScheduleEventData, ScheduleMode } from '../types';
3
+ type ResizeEdge = 'start' | 'end';
4
+ interface ResizeState {
5
+ event: ScheduleEventData;
6
+ edge: ResizeEdge;
7
+ container: HTMLElement;
8
+ originalLeft: number;
9
+ originalWidth: number;
10
+ currentLeft: number;
11
+ currentWidth: number;
12
+ eventDate: string;
13
+ originalStart: DateTimeStringValue;
14
+ originalEnd: DateTimeStringValue;
15
+ dayIndex: number;
16
+ dayCount: number;
17
+ }
18
+ export declare function useHorizontalEventResize(input: {
19
+ enabled: () => boolean;
20
+ mode: () => ScheduleMode;
21
+ startTime: () => string;
22
+ endTime: () => string;
23
+ intervalMinutes: () => number;
24
+ onEventResize: () => ((data: EventDropData) => void) | undefined;
25
+ canResizeEvent: () => ((event: ScheduleEventData) => boolean) | undefined;
26
+ }): {
27
+ state: import("vue").Ref<{
28
+ event: {
29
+ recurrence?: never | undefined;
30
+ recurringEventId?: never | undefined;
31
+ recurrenceId?: never | undefined;
32
+ id: string | number;
33
+ title: string;
34
+ start: Date | DateTimeStringValue;
35
+ end: Date | DateTimeStringValue;
36
+ color: import("@mantine-vue/core").MantineColor;
37
+ variant?: "filled" | "light" | undefined;
38
+ display?: "default" | "background" | undefined;
39
+ payload?: import("..").EventPayload | undefined;
40
+ resourceId?: string | number | undefined;
41
+ recurringInstance?: {
42
+ isRecurringInstance: boolean;
43
+ recurringEventId: string | number;
44
+ recurrenceId: DateTimeStringValue;
45
+ originalStart: DateTimeStringValue;
46
+ originalEnd: DateTimeStringValue;
47
+ } | undefined;
48
+ } | {
49
+ recurrence: {
50
+ rrule: string;
51
+ exdate?: DateTimeStringValue[] | undefined;
52
+ dtstart?: DateTimeStringValue | undefined;
53
+ };
54
+ recurringEventId?: never | undefined;
55
+ recurrenceId?: never | undefined;
56
+ id: string | number;
57
+ title: string;
58
+ start: Date | DateTimeStringValue;
59
+ end: Date | DateTimeStringValue;
60
+ color: import("@mantine-vue/core").MantineColor;
61
+ variant?: "filled" | "light" | undefined;
62
+ display?: "default" | "background" | undefined;
63
+ payload?: import("..").EventPayload | undefined;
64
+ resourceId?: string | number | undefined;
65
+ recurringInstance?: {
66
+ isRecurringInstance: boolean;
67
+ recurringEventId: string | number;
68
+ recurrenceId: DateTimeStringValue;
69
+ originalStart: DateTimeStringValue;
70
+ originalEnd: DateTimeStringValue;
71
+ } | undefined;
72
+ } | {
73
+ recurrence?: never | undefined;
74
+ recurringEventId: string | number;
75
+ recurrenceId: DateTimeStringValue;
76
+ id: string | number;
77
+ title: string;
78
+ start: Date | DateTimeStringValue;
79
+ end: Date | DateTimeStringValue;
80
+ color: import("@mantine-vue/core").MantineColor;
81
+ variant?: "filled" | "light" | undefined;
82
+ display?: "default" | "background" | undefined;
83
+ payload?: import("..").EventPayload | undefined;
84
+ resourceId?: string | number | undefined;
85
+ recurringInstance?: {
86
+ isRecurringInstance: boolean;
87
+ recurringEventId: string | number;
88
+ recurrenceId: DateTimeStringValue;
89
+ originalStart: DateTimeStringValue;
90
+ originalEnd: DateTimeStringValue;
91
+ } | undefined;
92
+ };
93
+ edge: ResizeEdge;
94
+ container: HTMLElement;
95
+ originalLeft: number;
96
+ originalWidth: number;
97
+ currentLeft: number;
98
+ currentWidth: number;
99
+ eventDate: string;
100
+ originalStart: DateTimeStringValue;
101
+ originalEnd: DateTimeStringValue;
102
+ dayIndex: number;
103
+ dayCount: number;
104
+ } | null, ResizeState | {
105
+ event: {
106
+ recurrence?: never | undefined;
107
+ recurringEventId?: never | undefined;
108
+ recurrenceId?: never | undefined;
109
+ id: string | number;
110
+ title: string;
111
+ start: Date | DateTimeStringValue;
112
+ end: Date | DateTimeStringValue;
113
+ color: import("@mantine-vue/core").MantineColor;
114
+ variant?: "filled" | "light" | undefined;
115
+ display?: "default" | "background" | undefined;
116
+ payload?: import("..").EventPayload | undefined;
117
+ resourceId?: string | number | undefined;
118
+ recurringInstance?: {
119
+ isRecurringInstance: boolean;
120
+ recurringEventId: string | number;
121
+ recurrenceId: DateTimeStringValue;
122
+ originalStart: DateTimeStringValue;
123
+ originalEnd: DateTimeStringValue;
124
+ } | undefined;
125
+ } | {
126
+ recurrence: {
127
+ rrule: string;
128
+ exdate?: DateTimeStringValue[] | undefined;
129
+ dtstart?: DateTimeStringValue | undefined;
130
+ };
131
+ recurringEventId?: never | undefined;
132
+ recurrenceId?: never | undefined;
133
+ id: string | number;
134
+ title: string;
135
+ start: Date | DateTimeStringValue;
136
+ end: Date | DateTimeStringValue;
137
+ color: import("@mantine-vue/core").MantineColor;
138
+ variant?: "filled" | "light" | undefined;
139
+ display?: "default" | "background" | undefined;
140
+ payload?: import("..").EventPayload | undefined;
141
+ resourceId?: string | number | undefined;
142
+ recurringInstance?: {
143
+ isRecurringInstance: boolean;
144
+ recurringEventId: string | number;
145
+ recurrenceId: DateTimeStringValue;
146
+ originalStart: DateTimeStringValue;
147
+ originalEnd: DateTimeStringValue;
148
+ } | undefined;
149
+ } | {
150
+ recurrence?: never | undefined;
151
+ recurringEventId: string | number;
152
+ recurrenceId: DateTimeStringValue;
153
+ id: string | number;
154
+ title: string;
155
+ start: Date | DateTimeStringValue;
156
+ end: Date | DateTimeStringValue;
157
+ color: import("@mantine-vue/core").MantineColor;
158
+ variant?: "filled" | "light" | undefined;
159
+ display?: "default" | "background" | undefined;
160
+ payload?: import("..").EventPayload | undefined;
161
+ resourceId?: string | number | undefined;
162
+ recurringInstance?: {
163
+ isRecurringInstance: boolean;
164
+ recurringEventId: string | number;
165
+ recurrenceId: DateTimeStringValue;
166
+ originalStart: DateTimeStringValue;
167
+ originalEnd: DateTimeStringValue;
168
+ } | undefined;
169
+ };
170
+ edge: ResizeEdge;
171
+ container: HTMLElement;
172
+ originalLeft: number;
173
+ originalWidth: number;
174
+ currentLeft: number;
175
+ currentWidth: number;
176
+ eventDate: string;
177
+ originalStart: DateTimeStringValue;
178
+ originalEnd: DateTimeStringValue;
179
+ dayIndex: number;
180
+ dayCount: number;
181
+ } | null>;
182
+ handleResizeStart: (params: {
183
+ event: ScheduleEventData;
184
+ edge: ResizeEdge;
185
+ container: HTMLElement;
186
+ originalLeft: number;
187
+ originalWidth: number;
188
+ eventDate: string;
189
+ pointerEvent: PointerEvent;
190
+ dayIndex?: number;
191
+ dayCount?: number;
192
+ }) => void;
193
+ getResizePosition: (id: string | number) => {
194
+ left: number;
195
+ width: number;
196
+ } | null;
197
+ isResizableEvent: (event: ScheduleEventData) => boolean;
198
+ wasResizing: () => boolean;
199
+ };
200
+ export {};
package/lib/index.d.mts CHANGED
@@ -7,6 +7,10 @@ export * from './components/DayView';
7
7
  export * from './components/WeekView';
8
8
  export * from './components/MonthView';
9
9
  export * from './components/YearView';
10
+ export * from './components/ResourcesDayView';
11
+ export * from './components/ResourcesWeekView';
12
+ export * from './components/ResourcesMonthView';
13
+ export * from './components/ResourcesSchedule';
10
14
  export * from './components/ScheduleEvent';
11
15
  export * from './components/ScheduleHeader';
12
16
  export * from './components/CurrentTimeIndicator';
package/lib/index.d.ts CHANGED
@@ -7,6 +7,10 @@ export * from './components/DayView';
7
7
  export * from './components/WeekView';
8
8
  export * from './components/MonthView';
9
9
  export * from './components/YearView';
10
+ export * from './components/ResourcesDayView';
11
+ export * from './components/ResourcesWeekView';
12
+ export * from './components/ResourcesMonthView';
13
+ export * from './components/ResourcesSchedule';
10
14
  export * from './components/ScheduleEvent';
11
15
  export * from './components/ScheduleHeader';
12
16
  export * from './components/CurrentTimeIndicator';
package/lib/labels.d.ts CHANGED
@@ -19,6 +19,9 @@ export interface ScheduleLabels {
19
19
  viewSelectLabel: string;
20
20
  noEvents: string;
21
21
  moreLabel: (hiddenEventsCount: number) => string;
22
+ resource?: string;
23
+ resources?: string;
24
+ resourceSlot?: string;
22
25
  }
23
26
  export declare const DEFAULT_SCHEDULE_LABELS: ScheduleLabels;
24
27
  export type ScheduleLabelsOverride = Partial<ScheduleLabels>;
package/lib/types.d.ts CHANGED
@@ -1,5 +1,18 @@
1
1
  import dayjs from 'dayjs';
2
+ import type { VNodeChild } from 'vue';
2
3
  import type { MantineColor } from '@mantine-vue/core';
4
+ /** Resource data object passed to resource view components */
5
+ export interface ScheduleResourceData {
6
+ id: string | number;
7
+ label: VNodeChild;
8
+ color?: MantineColor;
9
+ payload?: Record<PropertyKey, unknown>;
10
+ }
11
+ /** Group definition for resource views */
12
+ export interface ScheduleResourceGroup {
13
+ label: VNodeChild;
14
+ resourceIds: Array<string | number>;
15
+ }
3
16
  /** Date value type used by internal package utils */
4
17
  export type AnyDateValue = DateStringValue | Date | dayjs.Dayjs;
5
18
  /** Date value used by all Mantine components, format: `YYYY-MM-DD` */
@@ -54,6 +67,8 @@ interface ScheduleEventBase<Payload extends EventPayload = EventPayload> {
54
67
  display?: 'default' | 'background';
55
68
  /** Additional event data, defined by the user, not used internally by the library */
56
69
  payload?: Payload;
70
+ /** Resource ID that this event belongs to, used by resource view components */
71
+ resourceId?: string | number;
57
72
  }
58
73
  /** One-off event without recurrence */
59
74
  export interface ScheduleSingleEventData<Payload extends EventPayload = EventPayload> extends ScheduleEventBase<Payload> {
@@ -0,0 +1,2 @@
1
+ import type { ScheduleResourceData } from '../../types';
2
+ export declare function getGroupToResourceIdMap(resources: ScheduleResourceData[]): Map<string, string | number>;
@@ -0,0 +1,17 @@
1
+ import type { ScheduleResourceData, ScheduleResourceGroup } from '../../types';
2
+ export interface GroupRange {
3
+ group: ScheduleResourceGroup;
4
+ startIndex: number;
5
+ count: number;
6
+ }
7
+ export interface ResourceGroupInfo {
8
+ group: ScheduleResourceGroup;
9
+ position: 'first' | 'middle' | 'last' | 'only';
10
+ count: number;
11
+ }
12
+ export interface OrderedResourcesResult {
13
+ orderedResources: ScheduleResourceData[];
14
+ groupRanges: GroupRange[];
15
+ resourceGroupMap: Array<ResourceGroupInfo | null>;
16
+ }
17
+ export declare function getOrderedResources(resources: ScheduleResourceData[], groups: ScheduleResourceGroup[] | undefined): OrderedResourcesResult;
@@ -0,0 +1,8 @@
1
+ export type ResourcesGridControls = Array<Array<HTMLButtonElement | undefined>>;
2
+ export interface HandleResourcesGridKeyDownInput {
3
+ controls: ResourcesGridControls;
4
+ resourceIndex: number;
5
+ slotIndex: number;
6
+ event: KeyboardEvent;
7
+ }
8
+ export declare function handleResourcesGridKeyDown({ controls, resourceIndex, slotIndex, event, }: HandleResourcesGridKeyDownInput): void;
@@ -39,3 +39,8 @@ export type { ParsedTime } from './parse-time-string/parse-time-string';
39
39
  export type { CalculateDropTimeInput, CalculateDropTimeResult, } from './calculate-drop-time/calculate-drop-time';
40
40
  export type { CalculateMonthDropDateInput, CalculateMonthDropDateResult, } from './calculate-month-drop-date/calculate-month-drop-date';
41
41
  export type { BusinessHoursMod, BusinessHoursPerDay, BusinessHoursRange, BusinessHoursValue, GetBusinessHoursModInput, } from './get-business-hours-mod/get-business-hours-mod';
42
+ export { getOrderedResources } from './get-ordered-resources/get-ordered-resources';
43
+ export type { GroupRange, OrderedResourcesResult, ResourceGroupInfo, } from './get-ordered-resources/get-ordered-resources';
44
+ export { getGroupToResourceIdMap } from './get-group-to-resource-id-map/get-group-to-resource-id-map';
45
+ export { handleResourcesGridKeyDown } from './handle-resources-grid-key-down/handle-resources-grid-key-down';
46
+ export type { HandleResourcesGridKeyDownInput, ResourcesGridControls, } from './handle-resources-grid-key-down/handle-resources-grid-key-down';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantine-vue/schedule",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "Vue schedule and calendar components equivalent to @mantine/schedule",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -44,9 +44,9 @@
44
44
  "vue": "^3.5.0"
45
45
  },
46
46
  "peerDependencies": {
47
- "@mantine-vue/core": "2.1.0",
48
- "@mantine-vue/dates": "2.1.0",
49
- "@mantine-vue/hooks": "2.1.0",
47
+ "@mantine-vue/core": "2.2.0",
48
+ "@mantine-vue/dates": "2.2.0",
49
+ "@mantine-vue/hooks": "2.2.0",
50
50
  "dayjs": ">=1.0.0",
51
51
  "vue": "^3.5.0"
52
52
  }