@progress/kendo-angular-scheduler 23.3.0-develop.15 → 23.3.0-develop.17
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.
|
@@ -43,8 +43,8 @@ const packageMetadata = {
|
|
|
43
43
|
productName: 'Kendo UI for Angular',
|
|
44
44
|
productCode: 'KENDOUIANGULAR',
|
|
45
45
|
productCodes: ['KENDOUIANGULAR'],
|
|
46
|
-
publishDate:
|
|
47
|
-
version: '23.3.0-develop.
|
|
46
|
+
publishDate: 1774600251,
|
|
47
|
+
version: '23.3.0-develop.17',
|
|
48
48
|
licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
|
|
49
49
|
};
|
|
50
50
|
|
|
@@ -2550,6 +2550,9 @@ function rtlScrollPosition(element, position) {
|
|
|
2550
2550
|
* @hidden
|
|
2551
2551
|
*/
|
|
2552
2552
|
const isVisible = (element) => {
|
|
2553
|
+
if (!element?.getBoundingClientRect) {
|
|
2554
|
+
return false;
|
|
2555
|
+
}
|
|
2553
2556
|
const rect = element.getBoundingClientRect();
|
|
2554
2557
|
const hasSize = rect.width > 0 && rect.height > 0;
|
|
2555
2558
|
const hasPosition = rect.x !== 0 && rect.y !== 0;
|
|
@@ -15837,6 +15840,42 @@ const columnIndexComparer = (a, b) => {
|
|
|
15837
15840
|
}
|
|
15838
15841
|
return indexA - indexB;
|
|
15839
15842
|
};
|
|
15843
|
+
function addMinHeightOverflowEvents(sorted, slots, slotItems) {
|
|
15844
|
+
const firstSlot = slots[0];
|
|
15845
|
+
if (!firstSlot || slots.length <= 1) {
|
|
15846
|
+
return;
|
|
15847
|
+
}
|
|
15848
|
+
const slotDurationMs = firstSlot.end.getTime() - firstSlot.start.getTime();
|
|
15849
|
+
const slotHeight = firstSlot.height;
|
|
15850
|
+
if (slotDurationMs <= 0 || slotHeight <= 0) {
|
|
15851
|
+
return;
|
|
15852
|
+
}
|
|
15853
|
+
const msPerPixel = slotDurationMs / slotHeight;
|
|
15854
|
+
const minEventDurationMs = MIN_EVENT_HEIGHT * msPerPixel;
|
|
15855
|
+
sorted.forEach(event => {
|
|
15856
|
+
const eventDurationMs = event.item.endTime.getTime() - event.item.startTime.getTime();
|
|
15857
|
+
if (eventDurationMs >= minEventDurationMs) {
|
|
15858
|
+
return;
|
|
15859
|
+
}
|
|
15860
|
+
const visualEndMs = event.item.startTime.getTime() + minEventDurationMs;
|
|
15861
|
+
const endMs = event.item.endTime.getTime();
|
|
15862
|
+
for (let i = 0; i < slots.length; i++) {
|
|
15863
|
+
const slot = slots[i];
|
|
15864
|
+
if (slot.end.getTime() <= endMs) {
|
|
15865
|
+
continue;
|
|
15866
|
+
}
|
|
15867
|
+
if (slot.start.getTime() >= visualEndMs) {
|
|
15868
|
+
break;
|
|
15869
|
+
}
|
|
15870
|
+
if (intersects(event.item.startTime, event.item.endTime, slot.start, slot.end)) {
|
|
15871
|
+
continue;
|
|
15872
|
+
}
|
|
15873
|
+
const value = slotItems[slot.key] = slotItems[slot.key] || { events: [] };
|
|
15874
|
+
value.slot = slot;
|
|
15875
|
+
value.events.push(event);
|
|
15876
|
+
}
|
|
15877
|
+
});
|
|
15878
|
+
}
|
|
15840
15879
|
function initTimeColumns(slotKeys, slotItems) {
|
|
15841
15880
|
// Break slots into groups with overlapping events.
|
|
15842
15881
|
let columns = 0;
|
|
@@ -15850,7 +15889,14 @@ function initTimeColumns(slotKeys, slotItems) {
|
|
|
15850
15889
|
groupSlots.push(slot);
|
|
15851
15890
|
for (let eventIdx = 0; eventIdx < count; eventIdx++) {
|
|
15852
15891
|
const event = events[eventIdx];
|
|
15853
|
-
|
|
15892
|
+
const endsInSlot = event.item.endTime.getTime() <= slot.end.getTime();
|
|
15893
|
+
// Grouping needs to consider the enforced minimum rendered height with MIN_EVENT_HEIGHT.
|
|
15894
|
+
let visuallyEndsInSlot = true;
|
|
15895
|
+
if (endsInSlot) {
|
|
15896
|
+
const eventTop = event.rect ? event.rect.top : (slot.rect.top + timeOffset(slot, event.item.startTime));
|
|
15897
|
+
visuallyEndsInSlot = eventTop + MIN_EVENT_HEIGHT <= slot.rect.top + slot.rect.height;
|
|
15898
|
+
}
|
|
15899
|
+
groupEnd = groupEnd && endsInSlot && visuallyEndsInSlot;
|
|
15854
15900
|
if (isNumber(event.columnIndex)) {
|
|
15855
15901
|
continue;
|
|
15856
15902
|
}
|
|
@@ -15859,6 +15905,7 @@ function initTimeColumns(slotKeys, slotItems) {
|
|
|
15859
15905
|
};
|
|
15860
15906
|
event.columnIndex = eventIdx;
|
|
15861
15907
|
event.lastColumn = true;
|
|
15908
|
+
let columnFound = false;
|
|
15862
15909
|
for (let idx = 0, previousIdx = -1; idx < eventIdx; idx++) {
|
|
15863
15910
|
const current = events[idx];
|
|
15864
15911
|
if (current.columnIndex > previousIdx + 1) {
|
|
@@ -15866,9 +15913,10 @@ function initTimeColumns(slotKeys, slotItems) {
|
|
|
15866
15913
|
event.lastColumn = false;
|
|
15867
15914
|
events.splice(eventIdx, 1);
|
|
15868
15915
|
events.splice(event.columnIndex, 0, event);
|
|
15916
|
+
columnFound = true;
|
|
15869
15917
|
break;
|
|
15870
15918
|
}
|
|
15871
|
-
//
|
|
15919
|
+
// Events that don't intersect their start or end times but overlap in rendered height due to the minimum event height
|
|
15872
15920
|
const anyOverlappingEvents = events.filter(e => e !== current && e.rect).some(event => {
|
|
15873
15921
|
const areIntersecting = intersects(event.item.startTime, event.item.endTime, current.item.startTime, current.item.endTime);
|
|
15874
15922
|
const areOverlapping = minHeightOverlaps(current.rect.top, event.rect.top);
|
|
@@ -15877,6 +15925,18 @@ function initTimeColumns(slotKeys, slotItems) {
|
|
|
15877
15925
|
const intersectingEvents = intersects(event.item.startTime, event.item.endTime, current.item.startTime, current.item.endTime);
|
|
15878
15926
|
const overlappingEvents = minHeightOverlaps(current.rect.top, event.rect.top);
|
|
15879
15927
|
if (!(anyOverlappingEvents || intersectingEvents || overlappingEvents)) {
|
|
15928
|
+
const targetColumn = current.columnIndex;
|
|
15929
|
+
// Verify no other event in the same column overlaps with the new event
|
|
15930
|
+
const hasColumnConflict = events.some(e => e !== current &&
|
|
15931
|
+
isNumber(e.columnIndex) &&
|
|
15932
|
+
e.columnIndex === targetColumn &&
|
|
15933
|
+
(intersects(event.item.startTime, event.item.endTime, e.item.startTime, e.item.endTime) ||
|
|
15934
|
+
(e.rect && event.rect && minHeightOverlaps(e.rect.top, event.rect.top))));
|
|
15935
|
+
if (hasColumnConflict) {
|
|
15936
|
+
previousIdx = current.columnIndex;
|
|
15937
|
+
current.lastColumn = false;
|
|
15938
|
+
continue;
|
|
15939
|
+
}
|
|
15880
15940
|
const currentSlotDay = new Date(slot.start).toDateString();
|
|
15881
15941
|
const hasPreviousSlotsWithMoreOrSameColumns = slotKeys.some(previousKey => {
|
|
15882
15942
|
const previousSlot = slotItems[previousKey].slot;
|
|
@@ -15888,20 +15948,32 @@ function initTimeColumns(slotKeys, slotItems) {
|
|
|
15888
15948
|
if (!hasPreviousSlotsWithMoreOrSameColumns) {
|
|
15889
15949
|
columns--;
|
|
15890
15950
|
}
|
|
15891
|
-
event.columnIndex =
|
|
15951
|
+
event.columnIndex = targetColumn;
|
|
15892
15952
|
event.lastColumn = !events.some((e) => {
|
|
15893
15953
|
const hasColumnIndex = e.columnIndex;
|
|
15894
|
-
const isBeforeCurrentIndex =
|
|
15954
|
+
const isBeforeCurrentIndex = targetColumn < e.columnIndex;
|
|
15895
15955
|
const areIntersecting = intersects(event.item.startTime, event.item.endTime, e.item.startTime, e.item.endTime);
|
|
15896
15956
|
return hasColumnIndex && isBeforeCurrentIndex && areIntersecting;
|
|
15897
15957
|
});
|
|
15898
15958
|
events.splice(eventIdx, 1);
|
|
15899
15959
|
events.splice(idx, 0, event);
|
|
15960
|
+
columnFound = true;
|
|
15900
15961
|
break;
|
|
15901
15962
|
}
|
|
15902
15963
|
previousIdx = current.columnIndex;
|
|
15903
15964
|
current.lastColumn = false;
|
|
15904
15965
|
}
|
|
15966
|
+
// After splice operations, array positions may not match column indices.
|
|
15967
|
+
// Recalculate the column index based on the highest occupied column.
|
|
15968
|
+
if (!columnFound) {
|
|
15969
|
+
let maxColumn = -1;
|
|
15970
|
+
for (let i = 0; i < eventIdx; i++) {
|
|
15971
|
+
if (isNumber(events[i].columnIndex) && events[i].columnIndex > maxColumn) {
|
|
15972
|
+
maxColumn = events[i].columnIndex;
|
|
15973
|
+
}
|
|
15974
|
+
}
|
|
15975
|
+
event.columnIndex = maxColumn + 1;
|
|
15976
|
+
}
|
|
15905
15977
|
}
|
|
15906
15978
|
if (groupEnd) {
|
|
15907
15979
|
groupSlots.forEach(item => item.columns = columns);
|
|
@@ -16073,6 +16145,7 @@ class SlotRange {
|
|
|
16073
16145
|
value.slot = slot;
|
|
16074
16146
|
value.events.push(event);
|
|
16075
16147
|
}));
|
|
16148
|
+
addMinHeightOverflowEvents(sorted, slots, slotItems);
|
|
16076
16149
|
const slotKeys = Object.keys(slotItems);
|
|
16077
16150
|
initTimeColumns(slotKeys, slotItems);
|
|
16078
16151
|
slotKeys.forEach((key) => {
|
package/package-metadata.mjs
CHANGED
|
@@ -7,7 +7,7 @@ export const packageMetadata = {
|
|
|
7
7
|
"productCodes": [
|
|
8
8
|
"KENDOUIANGULAR"
|
|
9
9
|
],
|
|
10
|
-
"publishDate":
|
|
11
|
-
"version": "23.3.0-develop.
|
|
10
|
+
"publishDate": 1774600251,
|
|
11
|
+
"version": "23.3.0-develop.17",
|
|
12
12
|
"licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
|
|
13
13
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@progress/kendo-angular-scheduler",
|
|
3
|
-
"version": "23.3.0-develop.
|
|
3
|
+
"version": "23.3.0-develop.17",
|
|
4
4
|
"description": "Kendo UI Scheduler Angular - Outlook or Google-style angular scheduler calendar. Full-featured and customizable embedded scheduling from the creator developers trust for professional UI components.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"author": "Progress",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"package": {
|
|
20
20
|
"productName": "Kendo UI for Angular",
|
|
21
21
|
"productCode": "KENDOUIANGULAR",
|
|
22
|
-
"publishDate":
|
|
22
|
+
"publishDate": 1774600251,
|
|
23
23
|
"licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
|
|
24
24
|
}
|
|
25
25
|
},
|
|
@@ -32,23 +32,23 @@
|
|
|
32
32
|
"@progress/kendo-data-query": "^1.7.3",
|
|
33
33
|
"@progress/kendo-drawing": "^1.24.1",
|
|
34
34
|
"@progress/kendo-licensing": "^1.10.0",
|
|
35
|
-
"@progress/kendo-angular-tooltip": "23.3.0-develop.
|
|
36
|
-
"@progress/kendo-angular-buttons": "23.3.0-develop.
|
|
37
|
-
"@progress/kendo-angular-common": "23.3.0-develop.
|
|
38
|
-
"@progress/kendo-angular-dateinputs": "23.3.0-develop.
|
|
39
|
-
"@progress/kendo-angular-dialog": "23.3.0-develop.
|
|
40
|
-
"@progress/kendo-angular-dropdowns": "23.3.0-develop.
|
|
41
|
-
"@progress/kendo-angular-icons": "23.3.0-develop.
|
|
42
|
-
"@progress/kendo-angular-inputs": "23.3.0-develop.
|
|
43
|
-
"@progress/kendo-angular-intl": "23.3.0-develop.
|
|
44
|
-
"@progress/kendo-angular-l10n": "23.3.0-develop.
|
|
45
|
-
"@progress/kendo-angular-label": "23.3.0-develop.
|
|
46
|
-
"@progress/kendo-angular-popup": "23.3.0-develop.
|
|
35
|
+
"@progress/kendo-angular-tooltip": "23.3.0-develop.17",
|
|
36
|
+
"@progress/kendo-angular-buttons": "23.3.0-develop.17",
|
|
37
|
+
"@progress/kendo-angular-common": "23.3.0-develop.17",
|
|
38
|
+
"@progress/kendo-angular-dateinputs": "23.3.0-develop.17",
|
|
39
|
+
"@progress/kendo-angular-dialog": "23.3.0-develop.17",
|
|
40
|
+
"@progress/kendo-angular-dropdowns": "23.3.0-develop.17",
|
|
41
|
+
"@progress/kendo-angular-icons": "23.3.0-develop.17",
|
|
42
|
+
"@progress/kendo-angular-inputs": "23.3.0-develop.17",
|
|
43
|
+
"@progress/kendo-angular-intl": "23.3.0-develop.17",
|
|
44
|
+
"@progress/kendo-angular-l10n": "23.3.0-develop.17",
|
|
45
|
+
"@progress/kendo-angular-label": "23.3.0-develop.17",
|
|
46
|
+
"@progress/kendo-angular-popup": "23.3.0-develop.17",
|
|
47
47
|
"rxjs": "^6.5.3 || ^7.0.0"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"tslib": "^2.3.1",
|
|
51
|
-
"@progress/kendo-angular-schematics": "23.3.0-develop.
|
|
51
|
+
"@progress/kendo-angular-schematics": "23.3.0-develop.17",
|
|
52
52
|
"@progress/kendo-date-math": "^1.3.2",
|
|
53
53
|
"@progress/kendo-draggable": "^3.0.2",
|
|
54
54
|
"@progress/kendo-file-saver": "^1.0.7",
|
|
@@ -9,10 +9,10 @@ const schematics_1 = require("@angular-devkit/schematics");
|
|
|
9
9
|
function default_1(options) {
|
|
10
10
|
const finalOptions = Object.assign(Object.assign({}, options), { mainNgModule: 'SchedulerModule', package: 'scheduler', peerDependencies: {
|
|
11
11
|
// peer deps of the dropdowns
|
|
12
|
-
'@progress/kendo-angular-treeview': '23.3.0-develop.
|
|
13
|
-
'@progress/kendo-angular-navigation': '23.3.0-develop.
|
|
12
|
+
'@progress/kendo-angular-treeview': '23.3.0-develop.17',
|
|
13
|
+
'@progress/kendo-angular-navigation': '23.3.0-develop.17',
|
|
14
14
|
// peer dependency of kendo-angular-inputs
|
|
15
|
-
'@progress/kendo-angular-dialog': '23.3.0-develop.
|
|
15
|
+
'@progress/kendo-angular-dialog': '23.3.0-develop.17',
|
|
16
16
|
// peer dependency of kendo-angular-icons
|
|
17
17
|
'@progress/kendo-svg-icons': '^4.0.0'
|
|
18
18
|
} });
|