@mantine/schedule 9.6.0 → 9.6.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.
Files changed (67) hide show
  1. package/cjs/components/DayView/DayView.cjs +11 -4
  2. package/cjs/components/DayView/DayView.cjs.map +1 -1
  3. package/cjs/components/DayView/DayView.module.cjs +2 -2
  4. package/cjs/components/DayView/DayView.module.cjs.map +1 -1
  5. package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs +12 -7
  6. package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs.map +1 -1
  7. package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs +3 -2
  8. package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs.map +1 -1
  9. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs +1 -1
  10. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs.map +1 -1
  11. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs +1 -1
  12. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs.map +1 -1
  13. package/cjs/components/ScheduleEvent/ScheduleEvent.module.cjs.map +1 -1
  14. package/cjs/components/WeekView/WeekView.cjs +11 -4
  15. package/cjs/components/WeekView/WeekView.cjs.map +1 -1
  16. package/cjs/components/WeekView/WeekView.module.cjs +2 -2
  17. package/cjs/components/WeekView/WeekView.module.cjs.map +1 -1
  18. package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs +4 -2
  19. package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs.map +1 -1
  20. package/cjs/index.cjs +4 -0
  21. package/cjs/utils/apply-cascade-layout/apply-cascade-layout.cjs +21 -0
  22. package/cjs/utils/apply-cascade-layout/apply-cascade-layout.cjs.map +1 -0
  23. package/cjs/{components/ResourcesDayView → utils}/get-overlap-clusters/get-overlap-clusters.cjs +2 -2
  24. package/cjs/utils/get-overlap-clusters/get-overlap-clusters.cjs.map +1 -0
  25. package/cjs/utils/is-event-in-time-range/is-event-in-time-range.cjs +2 -1
  26. package/cjs/utils/is-event-in-time-range/is-event-in-time-range.cjs.map +1 -1
  27. package/esm/components/DayView/DayView.mjs +11 -4
  28. package/esm/components/DayView/DayView.mjs.map +1 -1
  29. package/esm/components/DayView/DayView.module.mjs +2 -2
  30. package/esm/components/DayView/DayView.module.mjs.map +1 -1
  31. package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs +12 -7
  32. package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs.map +1 -1
  33. package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs +3 -2
  34. package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs.map +1 -1
  35. package/esm/components/ResourcesDayView/ResourcesDayView.mjs +1 -1
  36. package/esm/components/ResourcesDayView/ResourcesDayView.mjs.map +1 -1
  37. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs +1 -1
  38. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs.map +1 -1
  39. package/esm/components/ScheduleEvent/ScheduleEvent.module.mjs.map +1 -1
  40. package/esm/components/WeekView/WeekView.mjs +11 -4
  41. package/esm/components/WeekView/WeekView.mjs.map +1 -1
  42. package/esm/components/WeekView/WeekView.module.mjs +2 -2
  43. package/esm/components/WeekView/WeekView.module.mjs.map +1 -1
  44. package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs +4 -2
  45. package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs.map +1 -1
  46. package/esm/index.mjs +3 -1
  47. package/esm/utils/apply-cascade-layout/apply-cascade-layout.mjs +21 -0
  48. package/esm/utils/apply-cascade-layout/apply-cascade-layout.mjs.map +1 -0
  49. package/esm/{components/ResourcesDayView → utils}/get-overlap-clusters/get-overlap-clusters.mjs +2 -2
  50. package/esm/utils/get-overlap-clusters/get-overlap-clusters.mjs.map +1 -0
  51. package/esm/utils/is-event-in-time-range/is-event-in-time-range.mjs +2 -1
  52. package/esm/utils/is-event-in-time-range/is-event-in-time-range.mjs.map +1 -1
  53. package/lib/components/DayView/DayView.d.ts +5 -1
  54. package/lib/components/DayView/get-day-view-events/get-day-positioned-events.d.ts +4 -2
  55. package/lib/components/DayView/get-day-view-events/get-day-view-events.d.ts +3 -2
  56. package/lib/components/WeekView/WeekView.d.ts +5 -1
  57. package/lib/components/WeekView/get-week-view-events/get-week-positioned-events.d.ts +4 -2
  58. package/lib/types.d.ts +2 -0
  59. package/lib/utils/apply-cascade-layout/apply-cascade-layout.d.ts +6 -0
  60. package/lib/utils/get-overlap-clusters/get-overlap-clusters.d.ts +2 -0
  61. package/lib/utils/index.d.ts +3 -0
  62. package/package.json +4 -4
  63. package/styles.css +61 -0
  64. package/styles.layer.css +61 -0
  65. package/cjs/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.cjs.map +0 -1
  66. package/esm/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.mjs.map +0 -1
  67. package/lib/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.d.ts +0 -2
@@ -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, ScheduleMode, ScheduleViewLevel } from '../../types';
3
+ import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, ScheduleEventData, ScheduleEventOverlapMode, 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';
@@ -28,6 +28,10 @@ export interface DayViewProps extends BoxProps, StylesApiProps<DayViewFactory>,
28
28
  intervalMinutes?: number;
29
29
  /** If set, grid lines are displayed for intervals smaller than one hour, for example 15 and 30 minutes intervals @default true */
30
30
  withSubHourGridLines?: boolean;
31
+ /** Determines how events that overlap in time are laid out: `columns` splits the available width between them, `cascade` indents each event and stacks it over the previous one @default 'columns' */
32
+ eventOverlapMode?: ScheduleEventOverlapMode;
33
+ /** Time in ms the pointer must rest on an event before it is raised above the events covering it, only used with `eventOverlapMode="cascade"` @default 600 */
34
+ eventOverlapRaiseDelay?: number;
31
35
  /** If set, the all-day slot is displayed below the header @default true */
32
36
  withAllDaySlot?: boolean;
33
37
  /** Locale passed down to dayjs, overrides value defined on `DatesProvider` */
@@ -1,4 +1,4 @@
1
- import { AnyDateValue, DayPositionedEventData, ScheduleEventData } from '../../../types';
1
+ import { AnyDateValue, DayPositionedEventData, ScheduleEventData, ScheduleEventOverlapMode } from '../../../types';
2
2
  interface GetDayPositionedEventsInput {
3
3
  /** Date at which events are positioned, used to check if events are all-day */
4
4
  date: AnyDateValue;
@@ -10,6 +10,8 @@ interface GetDayPositionedEventsInput {
10
10
  endTime?: string;
11
11
  /** Number of minutes per time slot, used to align the canvas to whole slots */
12
12
  intervalMinutes?: number;
13
+ /** Determines how events that overlap in time are laid out @default 'columns' */
14
+ eventOverlapMode?: ScheduleEventOverlapMode;
13
15
  }
14
- export declare function getDayPositionedEvents({ events, startTime, endTime, intervalMinutes, date, }: GetDayPositionedEventsInput): DayPositionedEventData[];
16
+ export declare function getDayPositionedEvents({ events, startTime, endTime, intervalMinutes, date, eventOverlapMode, }: GetDayPositionedEventsInput): DayPositionedEventData[];
15
17
  export {};
@@ -1,12 +1,13 @@
1
- import { AnyDateValue, DayPositionedEventData, ScheduleEventData } from '../../../types';
1
+ import { AnyDateValue, DayPositionedEventData, ScheduleEventData, ScheduleEventOverlapMode } from '../../../types';
2
2
  interface GetDayViewEventsInput {
3
3
  events: ScheduleEventData[] | undefined;
4
4
  date: AnyDateValue;
5
5
  startTime?: string;
6
6
  endTime?: string;
7
7
  intervalMinutes?: number;
8
+ eventOverlapMode?: ScheduleEventOverlapMode;
8
9
  }
9
- export declare function getDayViewEvents({ events, date, startTime, endTime, intervalMinutes, }: GetDayViewEventsInput): {
10
+ export declare function getDayViewEvents({ events, date, startTime, endTime, intervalMinutes, eventOverlapMode, }: GetDayViewEventsInput): {
10
11
  allDayEvents: DayPositionedEventData[];
11
12
  regularEvents: DayPositionedEventData[];
12
13
  backgroundTimedEvents: DayPositionedEventData[];
@@ -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, ScheduleMode, ScheduleViewLevel } from '../../types';
3
+ import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, DayOfWeek, ScheduleEventData, ScheduleEventOverlapMode, ScheduleMode, ScheduleViewLevel } from '../../types';
4
4
  import { BusinessHoursValue } from '../../utils';
5
5
  import { AgendaViewStylesNames } from '../AgendaView/AgendaView';
6
6
  import { CurrentTimeIndicatorStylesNames } from '../CurrentTimeIndicator/CurrentTimeIndicator';
@@ -35,6 +35,10 @@ export interface WeekViewProps extends BoxProps, StylesApiProps<WeekViewFactory>
35
35
  weekendDays?: DayOfWeek[];
36
36
  /** If set to false, weekend days are hidden @default true */
37
37
  withWeekendDays?: boolean;
38
+ /** Determines how events that overlap in time are laid out: `columns` splits the available width between them, `cascade` indents each event and stacks it over the previous one @default 'columns' */
39
+ eventOverlapMode?: ScheduleEventOverlapMode;
40
+ /** Time in ms the pointer must rest on an event before it is raised above the events covering it, only used with `eventOverlapMode="cascade"` @default 600 */
41
+ eventOverlapRaiseDelay?: number;
38
42
  /** If set to true, highlights today in the weekday row @default false */
39
43
  highlightToday?: boolean;
40
44
  /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */
@@ -1,4 +1,4 @@
1
- import { AnyDateValue, DateStringValue, DayOfWeek, ScheduleEventData, WeekPositionedEventData } from '../../../types';
1
+ import { AnyDateValue, DateStringValue, DayOfWeek, ScheduleEventData, ScheduleEventOverlapMode, WeekPositionedEventData } from '../../../types';
2
2
  export interface GetWeekPositionedEventsInput {
3
3
  /** Date (week start) at which events are positioned, used to check if events are all-day */
4
4
  date: AnyDateValue;
@@ -16,6 +16,8 @@ export interface GetWeekPositionedEventsInput {
16
16
  weekendDays?: DayOfWeek[];
17
17
  /** If set to false, weekend days are hidden @default true */
18
18
  withWeekendDays?: boolean;
19
+ /** Determines how events that overlap in time are laid out @default 'columns' */
20
+ eventOverlapMode?: ScheduleEventOverlapMode;
19
21
  }
20
22
  /** Events grouped by week day date (YYYY-MM-DD 00:00:00) and by columns */
21
23
  export interface GroupedWeekEvents {
@@ -23,4 +25,4 @@ export interface GroupedWeekEvents {
23
25
  regularEvents: Record<DateStringValue, WeekPositionedEventData[]>;
24
26
  backgroundEvents: Record<DateStringValue, WeekPositionedEventData[]>;
25
27
  }
26
- export declare function getWeekPositionedEvents({ date, events, startTime, endTime, intervalMinutes, firstDayOfWeek, weekendDays, withWeekendDays, }: GetWeekPositionedEventsInput): GroupedWeekEvents;
28
+ export declare function getWeekPositionedEvents({ date, events, startTime, endTime, intervalMinutes, firstDayOfWeek, weekendDays, withWeekendDays, eventOverlapMode, }: GetWeekPositionedEventsInput): GroupedWeekEvents;
package/lib/types.d.ts CHANGED
@@ -102,6 +102,8 @@ interface ScheduleEventRuntimeMeta {
102
102
  }
103
103
  /** Event data object passed to all `@mantine/schedule` components */
104
104
  export type ScheduleEventData<Payload extends EventPayload = EventPayload> = (ScheduleSingleEventData<Payload> & ScheduleEventRuntimeMeta) | (ScheduleRecurringSeriesEventData<Payload> & ScheduleEventRuntimeMeta) | (ScheduleRecurringOverrideEventData<Payload> & ScheduleEventRuntimeMeta);
105
+ /** Controls how events that overlap in time are laid out along the horizontal axis */
106
+ export type ScheduleEventOverlapMode = 'columns' | 'cascade';
105
107
  export interface DayEventPositionData {
106
108
  /** All day events */
107
109
  allDay: boolean;
@@ -0,0 +1,6 @@
1
+ import { DayEventPositionData, ScheduleEventData } from '../../types';
2
+ /** Minimal shape `applyCascadeLayout` needs, shared by day and week positioned events */
3
+ export type CascadePositionedEvent = ScheduleEventData & {
4
+ position: Pick<DayEventPositionData, 'allDay' | 'column' | 'width' | 'offset' | 'overlaps'>;
5
+ };
6
+ export declare function applyCascadeLayout<T extends CascadePositionedEvent>(events: T[]): void;
@@ -0,0 +1,2 @@
1
+ import { ScheduleEventData } from '../../types';
2
+ export declare function getOverlapClusters<T extends ScheduleEventData>(events: T[]): T[][];
@@ -47,3 +47,6 @@ export type { HandleResourcesGridKeyDownInput, ResourcesGridControlsRef, } from
47
47
  export { getGroupToResourceIdMap } from './get-group-to-resource-id-map/get-group-to-resource-id-map';
48
48
  export { getIndexFromDragPoint } from './get-index-from-drag-point/get-index-from-drag-point';
49
49
  export { getDayRelativePercent } from './get-day-relative-percent/get-day-relative-percent';
50
+ export { getOverlapClusters } from './get-overlap-clusters/get-overlap-clusters';
51
+ export { applyCascadeLayout } from './apply-cascade-layout/apply-cascade-layout';
52
+ export type { CascadePositionedEvent } from './apply-cascade-layout/apply-cascade-layout';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantine/schedule",
3
- "version": "9.6.0",
3
+ "version": "9.6.1",
4
4
  "description": "Schedule Mantine component",
5
5
  "homepage": "https://mantine.dev/",
6
6
  "license": "MIT",
@@ -35,9 +35,9 @@
35
35
  "directory": "packages/@mantine/schedule"
36
36
  },
37
37
  "peerDependencies": {
38
- "@mantine/core": "9.6.0",
39
- "@mantine/dates": "9.6.0",
40
- "@mantine/hooks": "9.6.0",
38
+ "@mantine/core": "9.6.1",
39
+ "@mantine/dates": "9.6.1",
40
+ "@mantine/hooks": "9.6.1",
41
41
  "react": "^19.2.0",
42
42
  "react-dom": "^19.2.0"
43
43
  },
package/styles.css CHANGED
@@ -215,6 +215,37 @@
215
215
  cursor: default;
216
216
  }
217
217
 
218
+ .m_1ac94670:where([data-cascade]) {
219
+ z-index: var(--event-z-index, 3);
220
+ transition: z-index 0s;
221
+ }
222
+
223
+ .m_1ac94670:where([data-cascade]) .m_71699dc6 {
224
+ box-shadow: 0 0 0 1px var(--mantine-color-body);
225
+ }
226
+
227
+ @media (hover: hover) {
228
+
229
+ .m_1ac94670:where([data-cascade]):where(:not([data-resizing], [data-dragging])):hover {
230
+ z-index: var(--event-z-index-raised, 9);
231
+ transition-delay: var(--event-raise-delay, 600ms);
232
+ }
233
+ }
234
+
235
+ @media (hover: none) {
236
+
237
+ .m_1ac94670:where([data-cascade]):where(:not([data-resizing], [data-dragging])):active {
238
+ z-index: var(--event-z-index-raised, 9);
239
+ transition-delay: var(--event-raise-delay, 600ms);
240
+ }
241
+ }
242
+
243
+ /* Keyboard focus reveals a covered event immediately, hover waits for the dwell delay */
244
+
245
+ .m_1ac94670:where([data-cascade]):where(:not([data-resizing], [data-dragging])):where(:focus-visible) {
246
+ z-index: var(--event-z-index-raised, 9);
247
+ }
248
+
218
249
  .m_1ac94670:where([data-resizing]) {
219
250
  z-index: 10;
220
251
  }
@@ -233,6 +264,10 @@
233
264
  }
234
265
  }
235
266
 
267
+ .m_1ac94670:where([data-cascade][data-resizing]) {
268
+ z-index: var(--event-cascade-interaction-z-index, 999);
269
+ }
270
+
236
271
  .m_1ac94670:where([data-hanging='start'], [data-hanging='both'])::before {
237
272
  content: '';
238
273
  position: absolute;
@@ -751,6 +786,19 @@
751
786
  position: relative;
752
787
  }
753
788
 
789
+ /* Cascade events stack with an unbounded z-index, keep them out of the sticky header's layer */
790
+
791
+ .m_9389813:where(:has([data-cascade])) {
792
+ isolation: isolate;
793
+
794
+ /* Drag and resize feedback must stay above every cascade column */
795
+ --event-cascade-interaction-z-index: 999;
796
+ }
797
+
798
+ .m_9389813:where(:has([data-cascade])) .m_2d4819df {
799
+ z-index: var(--event-cascade-interaction-z-index);
800
+ }
801
+
754
802
  .m_9389813:where(:first-of-type) .m_cd179e73:where([data-first]) {
755
803
  border-top-color: transparent;
756
804
  }
@@ -1826,6 +1874,19 @@
1826
1874
  position: relative;
1827
1875
  }
1828
1876
 
1877
+ /* Cascade events stack with an unbounded z-index, keep them out of the sticky header's layer */
1878
+
1879
+ .m_cd58ae46:where(:has([data-cascade])) {
1880
+ isolation: isolate;
1881
+
1882
+ /* Drag and resize feedback must stay above every cascade column */
1883
+ --event-cascade-interaction-z-index: 999;
1884
+ }
1885
+
1886
+ .m_cd58ae46:where(:has([data-cascade])) .m_e0da287 {
1887
+ z-index: var(--event-cascade-interaction-z-index);
1888
+ }
1889
+
1829
1890
  .m_8ac0cbcd {
1830
1891
  display: block;
1831
1892
  width: 100%;
package/styles.layer.css CHANGED
@@ -215,6 +215,37 @@
215
215
  cursor: default;
216
216
  }
217
217
 
218
+ .m_1ac94670:where([data-cascade]) {
219
+ z-index: var(--event-z-index, 3);
220
+ transition: z-index 0s;
221
+ }
222
+
223
+ .m_1ac94670:where([data-cascade]) .m_71699dc6 {
224
+ box-shadow: 0 0 0 1px var(--mantine-color-body);
225
+ }
226
+
227
+ @media (hover: hover) {
228
+
229
+ .m_1ac94670:where([data-cascade]):where(:not([data-resizing], [data-dragging])):hover {
230
+ z-index: var(--event-z-index-raised, 9);
231
+ transition-delay: var(--event-raise-delay, 600ms);
232
+ }
233
+ }
234
+
235
+ @media (hover: none) {
236
+
237
+ .m_1ac94670:where([data-cascade]):where(:not([data-resizing], [data-dragging])):active {
238
+ z-index: var(--event-z-index-raised, 9);
239
+ transition-delay: var(--event-raise-delay, 600ms);
240
+ }
241
+ }
242
+
243
+ /* Keyboard focus reveals a covered event immediately, hover waits for the dwell delay */
244
+
245
+ .m_1ac94670:where([data-cascade]):where(:not([data-resizing], [data-dragging])):where(:focus-visible) {
246
+ z-index: var(--event-z-index-raised, 9);
247
+ }
248
+
218
249
  .m_1ac94670:where([data-resizing]) {
219
250
  z-index: 10;
220
251
  }
@@ -233,6 +264,10 @@
233
264
  }
234
265
  }
235
266
 
267
+ .m_1ac94670:where([data-cascade][data-resizing]) {
268
+ z-index: var(--event-cascade-interaction-z-index, 999);
269
+ }
270
+
236
271
  .m_1ac94670:where([data-hanging='start'], [data-hanging='both'])::before {
237
272
  content: '';
238
273
  position: absolute;
@@ -751,6 +786,19 @@
751
786
  position: relative;
752
787
  }
753
788
 
789
+ /* Cascade events stack with an unbounded z-index, keep them out of the sticky header's layer */
790
+
791
+ .m_9389813:where(:has([data-cascade])) {
792
+ isolation: isolate;
793
+
794
+ /* Drag and resize feedback must stay above every cascade column */
795
+ --event-cascade-interaction-z-index: 999;
796
+ }
797
+
798
+ .m_9389813:where(:has([data-cascade])) .m_2d4819df {
799
+ z-index: var(--event-cascade-interaction-z-index);
800
+ }
801
+
754
802
  .m_9389813:where(:first-of-type) .m_cd179e73:where([data-first]) {
755
803
  border-top-color: transparent;
756
804
  }
@@ -1826,6 +1874,19 @@
1826
1874
  position: relative;
1827
1875
  }
1828
1876
 
1877
+ /* Cascade events stack with an unbounded z-index, keep them out of the sticky header's layer */
1878
+
1879
+ .m_cd58ae46:where(:has([data-cascade])) {
1880
+ isolation: isolate;
1881
+
1882
+ /* Drag and resize feedback must stay above every cascade column */
1883
+ --event-cascade-interaction-z-index: 999;
1884
+ }
1885
+
1886
+ .m_cd58ae46:where(:has([data-cascade])) .m_e0da287 {
1887
+ z-index: var(--event-cascade-interaction-z-index);
1888
+ }
1889
+
1829
1890
  .m_8ac0cbcd {
1830
1891
  display: block;
1831
1892
  width: 100%;
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-overlap-clusters.cjs","names":["isEventsOverlap"],"sources":["../../../../src/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.ts"],"sourcesContent":["import { DayPositionedEventData } from '../../../types';\nimport { isEventsOverlap } from '../../../utils';\n\nexport function getOverlapClusters(events: DayPositionedEventData[]): DayPositionedEventData[][] {\n const clusters: DayPositionedEventData[][] = [];\n const assigned = new Set<number>();\n\n for (let i = 0; i < events.length; i++) {\n if (assigned.has(i)) {\n continue;\n }\n\n const cluster: DayPositionedEventData[] = [events[i]];\n assigned.add(i);\n\n let j = 0;\n while (j < cluster.length) {\n for (let k = 0; k < events.length; k++) {\n if (!assigned.has(k) && isEventsOverlap(cluster[j], events[k])) {\n cluster.push(events[k]);\n assigned.add(k);\n }\n }\n j++;\n }\n\n clusters.push(cluster);\n }\n\n return clusters;\n}\n"],"mappings":";;;AAGA,SAAgB,mBAAmB,QAA8D;CAC/F,MAAM,WAAuC,CAAC;CAC9C,MAAM,2BAAW,IAAI,IAAY;CAEjC,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACtC,IAAI,SAAS,IAAI,CAAC,GAChB;EAGF,MAAM,UAAoC,CAAC,OAAO,EAAE;EACpD,SAAS,IAAI,CAAC;EAEd,IAAI,IAAI;EACR,OAAO,IAAI,QAAQ,QAAQ;GACzB,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KACjC,IAAI,CAAC,SAAS,IAAI,CAAC,KAAKA,0BAAAA,gBAAgB,QAAQ,IAAI,OAAO,EAAE,GAAG;IAC9D,QAAQ,KAAK,OAAO,EAAE;IACtB,SAAS,IAAI,CAAC;GAChB;GAEF;EACF;EAEA,SAAS,KAAK,OAAO;CACvB;CAEA,OAAO;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-overlap-clusters.mjs","names":[],"sources":["../../../../src/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.ts"],"sourcesContent":["import { DayPositionedEventData } from '../../../types';\nimport { isEventsOverlap } from '../../../utils';\n\nexport function getOverlapClusters(events: DayPositionedEventData[]): DayPositionedEventData[][] {\n const clusters: DayPositionedEventData[][] = [];\n const assigned = new Set<number>();\n\n for (let i = 0; i < events.length; i++) {\n if (assigned.has(i)) {\n continue;\n }\n\n const cluster: DayPositionedEventData[] = [events[i]];\n assigned.add(i);\n\n let j = 0;\n while (j < cluster.length) {\n for (let k = 0; k < events.length; k++) {\n if (!assigned.has(k) && isEventsOverlap(cluster[j], events[k])) {\n cluster.push(events[k]);\n assigned.add(k);\n }\n }\n j++;\n }\n\n clusters.push(cluster);\n }\n\n return clusters;\n}\n"],"mappings":";;;AAGA,SAAgB,mBAAmB,QAA8D;CAC/F,MAAM,WAAuC,CAAC;CAC9C,MAAM,2BAAW,IAAI,IAAY;CAEjC,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACtC,IAAI,SAAS,IAAI,CAAC,GAChB;EAGF,MAAM,UAAoC,CAAC,OAAO,EAAE;EACpD,SAAS,IAAI,CAAC;EAEd,IAAI,IAAI;EACR,OAAO,IAAI,QAAQ,QAAQ;GACzB,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KACjC,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,gBAAgB,QAAQ,IAAI,OAAO,EAAE,GAAG;IAC9D,QAAQ,KAAK,OAAO,EAAE;IACtB,SAAS,IAAI,CAAC;GAChB;GAEF;EACF;EAEA,SAAS,KAAK,OAAO;CACvB;CAEA,OAAO;AACT"}
@@ -1,2 +0,0 @@
1
- import { DayPositionedEventData } from '../../../types';
2
- export declare function getOverlapClusters(events: DayPositionedEventData[]): DayPositionedEventData[][];