@bimetal/calendar-angular-components 0.34.0 → 0.36.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 (92) hide show
  1. package/LICENSE +57 -129
  2. package/README.md +1 -1
  3. package/dist/binding/controller.d.ts +10 -1
  4. package/dist/binding/controller.d.ts.map +1 -1
  5. package/dist/binding/controller.js +11 -1
  6. package/dist/binding/controller.js.map +1 -1
  7. package/dist/binding/index.d.ts +5 -5
  8. package/dist/binding/index.d.ts.map +1 -1
  9. package/dist/binding/index.js +5 -5
  10. package/dist/binding/index.js.map +1 -1
  11. package/dist/binding/services/event-render.service.d.ts +9 -0
  12. package/dist/binding/services/event-render.service.d.ts.map +1 -1
  13. package/dist/binding/services/event-render.service.js +11 -0
  14. package/dist/binding/services/event-render.service.js.map +1 -1
  15. package/dist/binding/services/pointer-gesture.service.d.ts +26 -0
  16. package/dist/binding/services/pointer-gesture.service.d.ts.map +1 -0
  17. package/dist/binding/services/pointer-gesture.service.js +37 -0
  18. package/dist/binding/services/pointer-gesture.service.js.map +1 -0
  19. package/dist/components/Calendar.d.ts +47 -8
  20. package/dist/components/Calendar.d.ts.map +1 -1
  21. package/dist/components/Calendar.js +183 -63
  22. package/dist/components/Calendar.js.map +1 -1
  23. package/dist/components/CalendarHeader.d.ts +12 -1
  24. package/dist/components/CalendarHeader.d.ts.map +1 -1
  25. package/dist/components/CalendarHeader.js +66 -14
  26. package/dist/components/CalendarHeader.js.map +1 -1
  27. package/dist/components/CategoryFilter.d.ts +4 -0
  28. package/dist/components/CategoryFilter.d.ts.map +1 -1
  29. package/dist/components/CategoryFilter.js +10 -5
  30. package/dist/components/CategoryFilter.js.map +1 -1
  31. package/dist/components/EventBar.d.ts +15 -4
  32. package/dist/components/EventBar.d.ts.map +1 -1
  33. package/dist/components/EventBar.js +108 -37
  34. package/dist/components/EventBar.js.map +1 -1
  35. package/dist/components/EventDialog.d.ts +11 -4
  36. package/dist/components/EventDialog.d.ts.map +1 -1
  37. package/dist/components/EventDialog.js +86 -44
  38. package/dist/components/EventDialog.js.map +1 -1
  39. package/dist/components/EventHistory.d.ts +14 -9
  40. package/dist/components/EventHistory.d.ts.map +1 -1
  41. package/dist/components/EventHistory.js +59 -55
  42. package/dist/components/EventHistory.js.map +1 -1
  43. package/dist/components/UndoToast.d.ts +9 -5
  44. package/dist/components/UndoToast.d.ts.map +1 -1
  45. package/dist/components/UndoToast.js +16 -27
  46. package/dist/components/UndoToast.js.map +1 -1
  47. package/dist/index.d.ts +0 -2
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +0 -2
  50. package/dist/index.js.map +1 -1
  51. package/dist/styles/index.css.d.ts +3 -0
  52. package/dist/views/agenda/AgendaView.d.ts +1 -0
  53. package/dist/views/agenda/AgendaView.d.ts.map +1 -1
  54. package/dist/views/agenda/AgendaView.js +9 -2
  55. package/dist/views/agenda/AgendaView.js.map +1 -1
  56. package/dist/views/day/DayView.d.ts +30 -4
  57. package/dist/views/day/DayView.d.ts.map +1 -1
  58. package/dist/views/day/DayView.js +61 -17
  59. package/dist/views/day/DayView.js.map +1 -1
  60. package/dist/views/month/MonthView.d.ts +21 -4
  61. package/dist/views/month/MonthView.d.ts.map +1 -1
  62. package/dist/views/month/MonthView.js +66 -12
  63. package/dist/views/month/MonthView.js.map +1 -1
  64. package/dist/views/month/WeekRow.d.ts +28 -4
  65. package/dist/views/month/WeekRow.d.ts.map +1 -1
  66. package/dist/views/month/WeekRow.js +100 -29
  67. package/dist/views/month/WeekRow.js.map +1 -1
  68. package/dist/views/resource/ResourceView.d.ts +32 -1
  69. package/dist/views/resource/ResourceView.d.ts.map +1 -1
  70. package/dist/views/resource/ResourceView.js +84 -22
  71. package/dist/views/resource/ResourceView.js.map +1 -1
  72. package/dist/views/timeline/TimelineView.d.ts +29 -3
  73. package/dist/views/timeline/TimelineView.d.ts.map +1 -1
  74. package/dist/views/timeline/TimelineView.js +83 -17
  75. package/dist/views/timeline/TimelineView.js.map +1 -1
  76. package/dist/views/week/AllDayRow.d.ts +21 -3
  77. package/dist/views/week/AllDayRow.d.ts.map +1 -1
  78. package/dist/views/week/AllDayRow.js +60 -13
  79. package/dist/views/week/AllDayRow.js.map +1 -1
  80. package/dist/views/week/TimeEvent.d.ts +20 -4
  81. package/dist/views/week/TimeEvent.d.ts.map +1 -1
  82. package/dist/views/week/TimeEvent.js +101 -31
  83. package/dist/views/week/TimeEvent.js.map +1 -1
  84. package/dist/views/week/WeekView.d.ts +25 -2
  85. package/dist/views/week/WeekView.d.ts.map +1 -1
  86. package/dist/views/week/WeekView.js +69 -21
  87. package/dist/views/week/WeekView.js.map +1 -1
  88. package/dist/views/year/YearView.d.ts +11 -4
  89. package/dist/views/year/YearView.d.ts.map +1 -1
  90. package/dist/views/year/YearView.js +26 -5
  91. package/dist/views/year/YearView.js.map +1 -1
  92. package/package.json +16 -13
@@ -1,11 +1,14 @@
1
1
  import { Component, Input, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { isSameDay, now, startOfDay, addDays, getHours, getMinutes, createTimeRange, overlaps, formatDateTime, segmentTimed, layoutTimed, getRecurrenceInstanceMetadata, } from '@bimetal/calendar-core';
4
- import { snapTimeFromMouseY } from '../../binding/index.js';
3
+ import { isSameDay, now, startOfDay, addDays, getHours, getMinutes, createTimeRange, overlaps, formatDateTime } from '@bimetal/temporal';
4
+ import { segmentTimed, layoutTimed, getRecurrenceInstanceMetadata } from '@bimetal/calendar-core';
5
+ import { colFromTimeGridX } from '@bimetal/calendar-headless';
6
+ import { snapTimeFromMouseY, CalendarPointerGestureService } from '../../binding/index.js';
5
7
  import { DEFAULT_HOUR_HEIGHT, DEFAULT_TIME_LABEL_WIDTH_DAY, DEFAULT_SCROLL_HOUR, createClickIntent } from '@bimetal/calendar-headless';
6
8
  import { TimeEventComponent } from '../week/TimeEvent.js';
7
9
  import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common";
10
+ import * as i1 from "../../binding/index.js";
11
+ import * as i2 from "@angular/common";
9
12
  const _c0 = ["timeGridEl"];
10
13
  const _c1 = ["gridInnerEl"];
11
14
  function ResourceViewComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
@@ -58,7 +61,7 @@ function ResourceViewComponent_ng_template_1_div_12_Template(rf, ctx) { if (rf &
58
61
  } if (rf & 2) {
59
62
  const i_r7 = ctx.index;
60
63
  const ctx_r0 = i0.ɵɵnextContext(2);
61
- i0.ɵɵstyleProp("left", ctx_r0.colLeft(i_r7))("width", ctx_r0.colWidth);
64
+ i0.ɵɵstyleProp("inset-inline-start", ctx_r0.colLeft(i_r7))("width", ctx_r0.colWidth);
62
65
  } }
63
66
  function ResourceViewComponent_ng_template_1_cal_time_event_13_Template(rf, ctx) { if (rf & 1) {
64
67
  const _r8 = i0.ɵɵgetCurrentView();
@@ -68,7 +71,7 @@ function ResourceViewComponent_ng_template_1_cal_time_event_13_Template(rf, ctx)
68
71
  } if (rf & 2) {
69
72
  const entry_r9 = ctx.$implicit;
70
73
  const ctx_r0 = i0.ɵɵnextContext(2);
71
- i0.ɵɵproperty("event", entry_r9.event)("dayCol", entry_r9.layout.dayCol)("dayCount", entry_r9.layout.dayCount)("lane", entry_r9.layout.lane)("laneCount", entry_r9.layout.laneCount)("startOffset", entry_r9.layout.startOffset)("endOffset", entry_r9.layout.endOffset)("dayDate", ctx_r0.currentDate)("hourHeight", ctx_r0.hourHeight)("timeLabelWidth", ctx_r0.timeLabelWidth)("ghost", (ctx_r0.previewEvent == null ? null : ctx_r0.previewEvent.id) === entry_r9.event.id)("clickThresholdMs", ctx_r0.config.clickThresholdMs)("locale", ctx_r0.config.locale)("snapMinutes", ctx_r0.config.core.granularity.day.minutes)("isSelected", ctx_r0.isTimeSelected(entry_r9.event));
74
+ i0.ɵɵproperty("config", ctx_r0.config)("event", entry_r9.event)("dayCol", entry_r9.layout.dayCol)("dayCount", entry_r9.layout.dayCount)("lane", entry_r9.layout.lane)("laneCount", entry_r9.layout.laneCount)("startOffset", entry_r9.layout.startOffset)("endOffset", entry_r9.layout.endOffset)("dayDate", ctx_r0.currentDate)("hourHeight", ctx_r0.hourHeight)("timeLabelWidth", ctx_r0.timeLabelWidth)("ghost", (ctx_r0.previewEvent == null ? null : ctx_r0.previewEvent.id) === entry_r9.event.id)("clickThresholdMs", ctx_r0.config.clickThresholdMs)("locale", ctx_r0.config.locale)("snapMinutes", ctx_r0.config.core.granularity.day.minutes)("isSelected", ctx_r0.isTimeSelected(entry_r9.event));
72
75
  } }
73
76
  function ResourceViewComponent_ng_template_1_div_14_Template(rf, ctx) { if (rf & 1) {
74
77
  i0.ɵɵelementStart(0, "div", 24);
@@ -76,7 +79,7 @@ function ResourceViewComponent_ng_template_1_div_14_Template(rf, ctx) { if (rf &
76
79
  i0.ɵɵelementEnd();
77
80
  } if (rf & 2) {
78
81
  const ctx_r0 = i0.ɵɵnextContext(2);
79
- i0.ɵɵstyleProp("top", ctx_r0.nowHours * ctx_r0.hourHeight, "px")("left", ctx_r0.timeLabelWidth, "px");
82
+ i0.ɵɵstyleProp("top", ctx_r0.nowHours * ctx_r0.hourHeight, "px")("inset-inline-start", ctx_r0.timeLabelWidth, "px");
80
83
  } }
81
84
  function ResourceViewComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
82
85
  const _r2 = i0.ɵɵgetCurrentView();
@@ -89,7 +92,7 @@ function ResourceViewComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
89
92
  i0.ɵɵelementEnd()();
90
93
  i0.ɵɵelementStart(7, "div", 11, 1)(9, "div", 12, 2);
91
94
  i0.ɵɵlistener("dragover", function ResourceViewComponent_ng_template_1_Template_div_dragover_9_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onGridDragOver($event)); })("drop", function ResourceViewComponent_ng_template_1_Template_div_drop_9_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onGridDrop($event)); })("dragleave", function ResourceViewComponent_ng_template_1_Template_div_dragleave_9_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onGridDragLeave($event)); });
92
- i0.ɵɵtemplate(11, ResourceViewComponent_ng_template_1_div_11_Template, 3, 7, "div", 13)(12, ResourceViewComponent_ng_template_1_div_12_Template, 1, 4, "div", 14)(13, ResourceViewComponent_ng_template_1_cal_time_event_13_Template, 1, 15, "cal-time-event", 15)(14, ResourceViewComponent_ng_template_1_div_14_Template, 2, 4, "div", 16);
95
+ i0.ɵɵtemplate(11, ResourceViewComponent_ng_template_1_div_11_Template, 3, 7, "div", 13)(12, ResourceViewComponent_ng_template_1_div_12_Template, 1, 4, "div", 14)(13, ResourceViewComponent_ng_template_1_cal_time_event_13_Template, 1, 16, "cal-time-event", 15)(14, ResourceViewComponent_ng_template_1_div_14_Template, 2, 4, "div", 16);
93
96
  i0.ɵɵelementEnd()()();
94
97
  } if (rf & 2) {
95
98
  const ctx_r0 = i0.ɵɵnextContext();
@@ -106,12 +109,20 @@ function ResourceViewComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
106
109
  i0.ɵɵadvance();
107
110
  i0.ɵɵproperty("ngForOf", ctx_r0.visibleResources)("ngForTrackBy", ctx_r0.trackResource);
108
111
  i0.ɵɵadvance();
109
- i0.ɵɵproperty("ngForOf", ctx_r0.timedEntries);
112
+ i0.ɵɵproperty("ngForOf", ctx_r0.timedEntries)("ngForTrackBy", ctx_r0.trackTimed);
110
113
  i0.ɵɵadvance();
111
114
  i0.ɵɵproperty("ngIf", ctx_r0.isToday);
112
115
  } }
113
116
  const HOURS = Array.from({ length: 24 }, (_, i) => i);
117
+ /**
118
+ * Single-day, multi-resource time grid: one column per visible resource, each
119
+ * with its own overlap-lane layout of timed events.
120
+ */
114
121
  export class ResourceViewComponent {
122
+ gesture;
123
+ constructor(gesture) {
124
+ this.gesture = gesture;
125
+ }
115
126
  currentDate;
116
127
  events = [];
117
128
  visibleResources = [];
@@ -130,6 +141,7 @@ export class ResourceViewComponent {
130
141
  hidePreviewEv = new EventEmitter();
131
142
  /** Native `dragend` der Source — Drag-Session vollständig beendet. */
132
143
  dragEnd = new EventEmitter();
144
+ resourceDropInfo = new EventEmitter();
133
145
  dragStartEv = new EventEmitter();
134
146
  timeGridEl;
135
147
  gridInnerEl;
@@ -138,6 +150,26 @@ export class ResourceViewComponent {
138
150
  timeLabelWidth = DEFAULT_TIME_LABEL_WIDTH_DAY;
139
151
  click = createClickIntent();
140
152
  ngAfterViewInit() {
153
+ // mcp-57 Slice E: shared FSM — resource column + snapped time, scrollport-bounded.
154
+ this.gesture.init({
155
+ hitTest: (x, y) => {
156
+ const inner = this.gridInnerEl?.nativeElement;
157
+ if (!inner)
158
+ return null;
159
+ const port = (inner.parentElement ?? inner).getBoundingClientRect();
160
+ if (x < port.left || x > port.right || y < port.top || y > port.bottom)
161
+ return null;
162
+ const resourceId = this.resourceFromX(x, inner);
163
+ if (resourceId === null)
164
+ return null;
165
+ return { resourceId, time: snapTimeFromMouseY(y, inner.getBoundingClientRect(), this.hourHeight, this.config.core.granularity.day.minutes) };
166
+ },
167
+ onGestureStart: (info) => this.dragStartEv.emit(info),
168
+ onGestureOver: (hit) => this.dragOverDateTime.emit({ date: this.currentDate, time: hit.time }),
169
+ onGestureLeave: () => this.hidePreviewEv.emit(),
170
+ onGestureDrop: (info, hit) => this.resourceDropInfo.emit({ info, date: this.currentDate, time: hit.time, resourceId: hit.resourceId }),
171
+ onGestureEnd: () => this.dragEnd.emit(),
172
+ });
141
173
  if (this.timeGridEl?.nativeElement) {
142
174
  this.timeGridEl.nativeElement.scrollTop = DEFAULT_SCROLL_HOUR * DEFAULT_HOUR_HEIGHT;
143
175
  }
@@ -167,7 +199,31 @@ export class ResourceViewComponent {
167
199
  * dayCol = Resource-Index, lane/laneCount aus layoutTimed pro Resource
168
200
  * — Überlapper in r1 dürfen die Spalte r2 nicht halbieren.
169
201
  */
202
+ /**
203
+ * CACHED PER INPUT IDENTITY, not per call (mcp-130 — the resource-view twin of
204
+ * mcp-129). As a plain getter this ran the full segment/lane layout and minted
205
+ * fresh {event, layout} wrappers on EVERY change-detection pass; Zone runs CD
206
+ * after every DOM event, so the dragstart itself handed the un-trackBy'd *ngFor
207
+ * all-new identities, every cal-time-event was re-created, and Chromium
208
+ * cancelled the native drag whose source died in its own dragstart task. The
209
+ * dragstart-survival fence in e2e/calendar.spec.ts went red on exactly this
210
+ * view before the cache + trackBy below.
211
+ */
212
+ timedCache = null;
170
213
  get timedEntries() {
214
+ const key = [this.events, this.previewEvent, this.visibleResources, this.currentDate];
215
+ const c = this.timedCache;
216
+ if (c && c.key.every((k, i) => k === key[i]))
217
+ return c.value;
218
+ const value = this.buildTimedEntries();
219
+ this.timedCache = { key, value };
220
+ return value;
221
+ }
222
+ /** Same identity rule the week view pins (`trackTimed`): event + column. */
223
+ trackTimed(_i, entry) {
224
+ return `${entry.event.id}@${entry.layout.dayCol}`;
225
+ }
226
+ buildTimedEntries() {
171
227
  const dayStart = startOfDay(this.currentDate);
172
228
  const dayEnd = addDays(dayStart, 1);
173
229
  const dayRange = createTimeRange(dayStart, dayEnd);
@@ -197,12 +253,14 @@ export class ResourceViewComponent {
197
253
  if (this.visibleResources.length === 0)
198
254
  return null;
199
255
  const rect = gridInner.getBoundingClientRect();
200
- const x = clientX - rect.left - this.timeLabelWidth;
201
- if (x < 0)
256
+ // mcp-91 R1 (review F2): shared, core-pinned guttered-row math (rtl incl.).
257
+ const rtl = getComputedStyle(gridInner).direction === 'rtl';
258
+ const inGutter = rtl
259
+ ? clientX > rect.left + rect.width - this.timeLabelWidth
260
+ : clientX < rect.left + this.timeLabelWidth;
261
+ if (inGutter)
202
262
  return null;
203
- const cw = (rect.width - this.timeLabelWidth) / this.visibleResources.length;
204
- const idx = Math.min(this.visibleResources.length - 1, Math.max(0, Math.floor(x / cw)));
205
- return this.visibleResources[idx].id;
263
+ return this.visibleResources[colFromTimeGridX(clientX, rect, this.timeLabelWidth, this.visibleResources.length, rtl)].id;
206
264
  }
207
265
  isOffHour(h) {
208
266
  const wh = this.config.core.workingHours;
@@ -263,7 +321,7 @@ export class ResourceViewComponent {
263
321
  }
264
322
  trackResource(_, r) { return r.id; }
265
323
  trackEvent(_, ev) { return ev.id; }
266
- static ɵfac = function ResourceViewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ResourceViewComponent)(); };
324
+ static ɵfac = function ResourceViewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ResourceViewComponent)(i0.ɵɵdirectiveInject(i1.CalendarPointerGestureService)); };
267
325
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ResourceViewComponent, selectors: [["cal-resource-view"]], viewQuery: function ResourceViewComponent_Query(rf, ctx) { if (rf & 1) {
268
326
  i0.ɵɵviewQuery(_c0, 5);
269
327
  i0.ɵɵviewQuery(_c1, 5);
@@ -271,17 +329,18 @@ export class ResourceViewComponent {
271
329
  let _t;
272
330
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.timeGridEl = _t.first);
273
331
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.gridInnerEl = _t.first);
274
- } }, hostAttrs: [2, "display", "contents"], inputs: { currentDate: "currentDate", events: "events", visibleResources: "visibleResources", config: "config", previewEvent: "previewEvent", selectedEventId: "selectedEventId", selectedInstanceDate: "selectedInstanceDate" }, outputs: { eventClick: "eventClick", selectEvent: "selectEvent", clearSelection: "clearSelection", resourceCellClick: "resourceCellClick", resourceDrop: "resourceDrop", dragOverDateTime: "dragOverDateTime", hidePreviewEv: "hidePreviewEv", dragEnd: "dragEnd", dragStartEv: "dragStartEv" }, decls: 3, vars: 2, consts: [["withResources", ""], ["timeGridEl", ""], ["gridInnerEl", ""], [4, "ngIf", "ngIfElse"], [1, "bm-cal-resource", "bm-cal-resource--empty"], [1, "bm-cal-resource"], [1, "bm-cal-resource__header"], [1, "bm-cal-resource__day-name"], [1, "bm-cal-resource__resources"], [1, "bm-cal-resource__time-spacer"], ["class", "bm-cal-resource__resource-header", "style", "flex: 1 1 0; min-width: 0;", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "bm-cal-resource__time-grid"], [1, "bm-cal-resource__time-grid-inner", 3, "dragover", "drop", "dragleave"], [3, "class", "top", "height", 4, "ngFor", "ngForOf"], ["class", "bm-cal-resource__resource-col", 3, "left", "width", "mousedown", "click", "dblclick", 4, "ngFor", "ngForOf", "ngForTrackBy"], [3, "event", "dayCol", "dayCount", "lane", "laneCount", "startOffset", "endOffset", "dayDate", "hourHeight", "timeLabelWidth", "ghost", "clickThresholdMs", "locale", "snapMinutes", "isSelected", "eventClick", "selectEvent", "dragStart", "dragEnd", 4, "ngFor", "ngForOf"], ["class", "bm-cal-resource__now-line", 3, "top", "left", 4, "ngIf"], [1, "bm-cal-resource__resource-header", 2, "flex", "1 1 0", "min-width", "0"], ["class", "bm-cal-resource__resource-dot", 3, "background-color", 4, "ngIf"], [1, "bm-cal-resource__resource-name"], [1, "bm-cal-resource__resource-dot"], [1, "bm-cal-resource__hour-label"], [1, "bm-cal-resource__resource-col", 3, "mousedown", "click", "dblclick"], [3, "eventClick", "selectEvent", "dragStart", "dragEnd", "event", "dayCol", "dayCount", "lane", "laneCount", "startOffset", "endOffset", "dayDate", "hourHeight", "timeLabelWidth", "ghost", "clickThresholdMs", "locale", "snapMinutes", "isSelected"], [1, "bm-cal-resource__now-line"], [1, "bm-cal-resource__now-dot"]], template: function ResourceViewComponent_Template(rf, ctx) { if (rf & 1) {
275
- i0.ɵɵtemplate(0, ResourceViewComponent_ng_container_0_Template, 3, 1, "ng-container", 3)(1, ResourceViewComponent_ng_template_1_Template, 15, 12, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
332
+ } }, hostAttrs: [2, "display", "contents"], inputs: { currentDate: "currentDate", events: "events", visibleResources: "visibleResources", config: "config", previewEvent: "previewEvent", selectedEventId: "selectedEventId", selectedInstanceDate: "selectedInstanceDate" }, outputs: { eventClick: "eventClick", selectEvent: "selectEvent", clearSelection: "clearSelection", resourceCellClick: "resourceCellClick", resourceDrop: "resourceDrop", dragOverDateTime: "dragOverDateTime", hidePreviewEv: "hidePreviewEv", dragEnd: "dragEnd", resourceDropInfo: "resourceDropInfo", dragStartEv: "dragStartEv" }, features: [i0.ɵɵProvidersFeature([CalendarPointerGestureService])], decls: 3, vars: 2, consts: [["withResources", ""], ["timeGridEl", ""], ["gridInnerEl", ""], [4, "ngIf", "ngIfElse"], [1, "bm-cal-resource", "bm-cal-resource--empty"], [1, "bm-cal-resource"], [1, "bm-cal-resource__header"], [1, "bm-cal-resource__day-name"], [1, "bm-cal-resource__resources"], [1, "bm-cal-resource__time-spacer"], ["class", "bm-cal-resource__resource-header", "style", "flex: 1 1 0; min-width: 0;", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "bm-cal-resource__time-grid"], [1, "bm-cal-resource__time-grid-inner", 3, "dragover", "drop", "dragleave"], [3, "class", "top", "height", 4, "ngFor", "ngForOf"], ["class", "bm-cal-resource__resource-col", 3, "inset-inline-start", "width", "mousedown", "click", "dblclick", 4, "ngFor", "ngForOf", "ngForTrackBy"], [3, "config", "event", "dayCol", "dayCount", "lane", "laneCount", "startOffset", "endOffset", "dayDate", "hourHeight", "timeLabelWidth", "ghost", "clickThresholdMs", "locale", "snapMinutes", "isSelected", "eventClick", "selectEvent", "dragStart", "dragEnd", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["class", "bm-cal-resource__now-line", 3, "top", "inset-inline-start", 4, "ngIf"], [1, "bm-cal-resource__resource-header", 2, "flex", "1 1 0", "min-width", "0"], ["class", "bm-cal-resource__resource-dot", 3, "background-color", 4, "ngIf"], [1, "bm-cal-resource__resource-name"], [1, "bm-cal-resource__resource-dot"], [1, "bm-cal-resource__hour-label"], [1, "bm-cal-resource__resource-col", 3, "mousedown", "click", "dblclick"], [3, "eventClick", "selectEvent", "dragStart", "dragEnd", "config", "event", "dayCol", "dayCount", "lane", "laneCount", "startOffset", "endOffset", "dayDate", "hourHeight", "timeLabelWidth", "ghost", "clickThresholdMs", "locale", "snapMinutes", "isSelected"], [1, "bm-cal-resource__now-line"], [1, "bm-cal-resource__now-dot"]], template: function ResourceViewComponent_Template(rf, ctx) { if (rf & 1) {
333
+ i0.ɵɵtemplate(0, ResourceViewComponent_ng_container_0_Template, 3, 1, "ng-container", 3)(1, ResourceViewComponent_ng_template_1_Template, 15, 13, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
276
334
  } if (rf & 2) {
277
335
  const withResources_r10 = i0.ɵɵreference(2);
278
336
  i0.ɵɵproperty("ngIf", ctx.visibleResources.length === 0)("ngIfElse", withResources_r10);
279
- } }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, TimeEventComponent], encapsulation: 2 });
337
+ } }, dependencies: [CommonModule, i2.NgForOf, i2.NgIf, TimeEventComponent], encapsulation: 2 });
280
338
  }
281
339
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceViewComponent, [{
282
340
  type: Component,
283
341
  args: [{
284
342
  selector: 'cal-resource-view',
343
+ providers: [CalendarPointerGestureService],
285
344
  standalone: true,
286
345
  host: { style: 'display: contents' },
287
346
  imports: [CommonModule, TimeEventComponent],
@@ -319,14 +378,15 @@ export class ResourceViewComponent {
319
378
  <!-- Click-target columns; drag handlers live on the grid-inner above -->
320
379
  <div *ngFor="let r of visibleResources; let i = index; trackBy: trackResource"
321
380
  class="bm-cal-resource__resource-col"
322
- [style.left]="colLeft(i)"
381
+ [style.inset-inline-start]="colLeft(i)"
323
382
  [style.width]="colWidth"
324
383
  (mousedown)="click.markMouseDown()"
325
384
  (click)="onColClick($event)"
326
385
  (dblclick)="onColDoubleClick($event, r.id)">
327
386
  </div>
328
387
  <!-- Events as siblings: TimeEvent positions relative to the full grid -->
329
- <cal-time-event *ngFor="let entry of timedEntries"
388
+ <cal-time-event *ngFor="let entry of timedEntries; trackBy: trackTimed"
389
+ [config]="config"
330
390
  [event]="entry.event"
331
391
  [dayCol]="entry.layout.dayCol" [dayCount]="entry.layout.dayCount"
332
392
  [lane]="entry.layout.lane" [laneCount]="entry.layout.laneCount"
@@ -344,7 +404,7 @@ export class ResourceViewComponent {
344
404
  </cal-time-event>
345
405
 
346
406
  <div *ngIf="isToday" class="bm-cal-resource__now-line"
347
- [style.top.px]="nowHours * hourHeight" [style.left.px]="timeLabelWidth">
407
+ [style.top.px]="nowHours * hourHeight" [style.inset-inline-start.px]="timeLabelWidth">
348
408
  <div class="bm-cal-resource__now-dot"></div>
349
409
  </div>
350
410
  </div>
@@ -353,7 +413,7 @@ export class ResourceViewComponent {
353
413
  </ng-template>
354
414
  `,
355
415
  }]
356
- }], null, { currentDate: [{
416
+ }], () => [{ type: i1.CalendarPointerGestureService }], { currentDate: [{
357
417
  type: Input
358
418
  }], events: [{
359
419
  type: Input
@@ -383,6 +443,8 @@ export class ResourceViewComponent {
383
443
  type: Output
384
444
  }], dragEnd: [{
385
445
  type: Output
446
+ }], resourceDropInfo: [{
447
+ type: Output
386
448
  }], dragStartEv: [{
387
449
  type: Output
388
450
  }], timeGridEl: [{
@@ -392,5 +454,5 @@ export class ResourceViewComponent {
392
454
  type: ViewChild,
393
455
  args: ['gridInnerEl']
394
456
  }] }); })();
395
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ResourceViewComponent, { className: "ResourceViewComponent", filePath: "views/resource/resourceview.ts", lineNumber: 90 }); })();
457
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ResourceViewComponent, { className: "ResourceViewComponent", filePath: "views/resource/resourceview.ts", lineNumber: 94 }); })();
396
458
  //# sourceMappingURL=ResourceView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceView.js","sourceRoot":"","sources":["../../../src/views/resource/ResourceView.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ResourceView.js","sourceRoot":"","sources":["../../../src/views/resource/ResourceView.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,18 @@
1
- import { EventEmitter } from '@angular/core';
1
+ import { EventEmitter, ElementRef, AfterViewInit } from '@angular/core';
2
2
  import type { CalendarEvent, CalendarDateTime, Resource, LayoutItem } from '@bimetal/calendar-core';
3
3
  import type { CalendarConfig } from '../../binding/index.js';
4
4
  import type { DragInfo } from '@bimetal/calendar-headless';
5
+ import { CalendarPointerGestureService } from '../../binding/index.js';
5
6
  import * as i0 from "@angular/core";
6
- export declare class TimelineViewComponent {
7
+ /**
8
+ * Multi-day, multi-resource Gantt-style timeline: one lane per resource, with
9
+ * all-day-style event bars spanning `days` date columns.
10
+ */
11
+ export declare class TimelineViewComponent implements AfterViewInit {
12
+ private gesture;
13
+ private host;
14
+ constructor(gesture: CalendarPointerGestureService, host: ElementRef<HTMLElement>);
15
+ ngAfterViewInit(): void;
7
16
  currentDate: CalendarDateTime;
8
17
  days: number;
9
18
  events: CalendarEvent[];
@@ -38,6 +47,12 @@ export declare class TimelineViewComponent {
38
47
  /** Native `dragend` der Source — Drag-Session vollständig beendet. */
39
48
  dragEnd: EventEmitter<void>;
40
49
  dragStartEv: EventEmitter<DragInfo>;
50
+ /** Pointer-gesture drop (mcp-57): same controller path, minus the DataTransfer. */
51
+ timelineDropInfo: EventEmitter<{
52
+ info: DragInfo;
53
+ date: CalendarDateTime;
54
+ resourceId: string;
55
+ }>;
41
56
  resourceLabelW: number;
42
57
  get dates(): CalendarDateTime[];
43
58
  get colTemplate(): string;
@@ -51,6 +66,17 @@ export declare class TimelineViewComponent {
51
66
  * event in by id — the timeline no longer reconstructs anything.
52
67
  */
53
68
  get displayEvents(): CalendarEvent[];
69
+ /**
70
+ * CACHED PER INPUT IDENTITY (mcp-130 R1). As a bare method call in the template
71
+ * this ran filter+segment+layout for EVERY lane on EVERY change-detection pass
72
+ * — including the dragstart's own — and minted fresh LayoutItem wrappers each
73
+ * time. `trackBy: trackItem` kept the dragged node alive, but that left the
74
+ * timeline hanging on ONE protective layer where mcp-129/130 deliberately keep
75
+ * two: the very lesson of that ticket ("one fenced source per class is not
76
+ * enough") applied to its defenses too. `laneHeight` calls this as well, so the
77
+ * cache also halves the per-CD layout work.
78
+ */
79
+ private itemsCache;
54
80
  itemsFor(resourceId: string): LayoutItem[];
55
81
  private dayFromX;
56
82
  onLaneDragOver(e: DragEvent): void;
@@ -65,6 +91,6 @@ export declare class TimelineViewComponent {
65
91
  trackItem(_: number, item: LayoutItem): string;
66
92
  isSelected(ev: CalendarEvent): boolean;
67
93
  static ɵfac: i0.ɵɵFactoryDeclaration<TimelineViewComponent, never>;
68
- static ɵcmp: i0.ɵɵComponentDeclaration<TimelineViewComponent, "cal-timeline-view", never, { "currentDate": { "alias": "currentDate"; "required": false; }; "days": { "alias": "days"; "required": false; }; "events": { "alias": "events"; "required": false; }; "visibleResources": { "alias": "visibleResources"; "required": false; }; "config": { "alias": "config"; "required": false; }; "previewEvent": { "alias": "previewEvent"; "required": false; }; "selectedEventId": { "alias": "selectedEventId"; "required": false; }; "selectedInstanceDate": { "alias": "selectedInstanceDate"; "required": false; }; }, { "eventClick": "eventClick"; "selectEvent": "selectEvent"; "clearSelection": "clearSelection"; "timelineCellClick": "timelineCellClick"; "timelineDrop": "timelineDrop"; "dragOverDate": "dragOverDate"; "hidePreviewEv": "hidePreviewEv"; "dragEnd": "dragEnd"; "dragStartEv": "dragStartEv"; }, never, never, true, never>;
94
+ static ɵcmp: i0.ɵɵComponentDeclaration<TimelineViewComponent, "cal-timeline-view", never, { "currentDate": { "alias": "currentDate"; "required": false; }; "days": { "alias": "days"; "required": false; }; "events": { "alias": "events"; "required": false; }; "visibleResources": { "alias": "visibleResources"; "required": false; }; "config": { "alias": "config"; "required": false; }; "previewEvent": { "alias": "previewEvent"; "required": false; }; "selectedEventId": { "alias": "selectedEventId"; "required": false; }; "selectedInstanceDate": { "alias": "selectedInstanceDate"; "required": false; }; }, { "eventClick": "eventClick"; "selectEvent": "selectEvent"; "clearSelection": "clearSelection"; "timelineCellClick": "timelineCellClick"; "timelineDrop": "timelineDrop"; "dragOverDate": "dragOverDate"; "hidePreviewEv": "hidePreviewEv"; "dragEnd": "dragEnd"; "dragStartEv": "dragStartEv"; "timelineDropInfo": "timelineDropInfo"; }, never, never, true, never>;
69
95
  }
70
96
  //# sourceMappingURL=TimelineView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TimelineView.d.ts","sourceRoot":"","sources":["../../../src/views/timeline/TimelineView.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAA2B,MAAM,eAAe,CAAC;AAEhG,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAKpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;;AAK3D,qBAmEa,qBAAqB;IACvB,WAAW,EAAG,gBAAgB,CAAC;IAC/B,IAAI,SAAK;IACT,MAAM,EAAE,aAAa,EAAE,CAAM;IAC7B,gBAAgB,EAAE,SAAS,QAAQ,EAAE,CAAM;IAC3C,MAAM,EAAG,cAAc,CAAC;IAExB,YAAY,EAAE,aAAa,GAAG,IAAI,CAAQ;IAC1C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IACtC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAa;IACpD,UAAU;iBAA+B,MAAM;cAAQ,OAAO;uBAAiB,MAAM;OAAM;IAC3F,WAAW;iBAA+B,MAAM;uBAAiB,MAAM;OAAM;IAC7E,cAAc,qBAA4B;IAC1C,iBAAiB;cAA4B,gBAAgB;oBAAc,MAAM;cAAQ,OAAO;OAAM;IACtG,YAAY;eAA6B,SAAS;cAAQ,gBAAgB;oBAAc,MAAM;OAAM;IACpG,YAAY,iCAAwC;IAC9D,yEAAyE;IAC/D,aAAa,qBAA4B;IACnD,sEAAsE;IAC5D,OAAO,qBAA4B;IACnC,WAAW,yBAAgC;IAErD,cAAc,SAAgC;IAE9C,IAAI,KAAK,IAAI,gBAAgB,EAAE,CAG9B;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,QAAQ,GAInB;IAED,OAAO,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO;IACrC,UAAU,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM;IAEvC;;;;OAIG;IACH,IAAI,aAAa,IAAI,aAAa,EAAE,CAInC;IAED,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE;IAM1C,OAAO,CAAC,QAAQ;IAQhB,cAAc,CAAC,CAAC,EAAE,SAAS;IAO3B,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM;IAM3C,eAAe,CAAC,CAAC,EAAE,SAAS;IAS5B,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAKtC,SAAS,mDAAuB;IAEhC,WAAW;IAMX,iBAAiB,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM;IAM3E,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ;IACpC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAgB;IACxC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAErC,UAAU,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO;yCApH3B,qBAAqB;2CAArB,qBAAqB;CAwHjC"}
1
+ {"version":3,"file":"TimelineView.d.ts","sourceRoot":"","sources":["../../../src/views/timeline/TimelineView.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAA4B,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5H,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;;AAIvE;;;GAGG;AACH,qBAsEa,qBAAsB,YAAW,aAAa;IAC7C,OAAO,CAAC,OAAO;IAAiC,OAAO,CAAC,IAAI;gBAApD,OAAO,EAAE,6BAA6B,EAAU,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC;IAEjG,eAAe;IAsBN,WAAW,EAAG,gBAAgB,CAAC;IAC/B,IAAI,SAAK;IACT,MAAM,EAAE,aAAa,EAAE,CAAM;IAC7B,gBAAgB,EAAE,SAAS,QAAQ,EAAE,CAAM;IAC3C,MAAM,EAAG,cAAc,CAAC;IAExB,YAAY,EAAE,aAAa,GAAG,IAAI,CAAQ;IAC1C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IACtC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAa;IACpD,UAAU;iBAA+B,MAAM;cAAQ,OAAO;uBAAiB,MAAM;OAAM;IAC3F,WAAW;iBAA+B,MAAM;uBAAiB,MAAM;OAAM;IAC7E,cAAc,qBAA4B;IAC1C,iBAAiB;cAA4B,gBAAgB;oBAAc,MAAM;cAAQ,OAAO;OAAM;IACtG,YAAY;eAA6B,SAAS;cAAQ,gBAAgB;oBAAc,MAAM;OAAM;IACpG,YAAY,iCAAwC;IAC9D,yEAAyE;IAC/D,aAAa,qBAA4B;IACnD,sEAAsE;IAC5D,OAAO,qBAA4B;IACnC,WAAW,yBAAgC;IACrD,mFAAmF;IACzE,gBAAgB;cAA4B,QAAQ;cAAQ,gBAAgB;oBAAc,MAAM;OAAM;IAEhH,cAAc,SAAgC;IAE9C,IAAI,KAAK,IAAI,gBAAgB,EAAE,CAG9B;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,QAAQ,GAInB;IAED,OAAO,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO;IACrC,UAAU,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM;IAEvC;;;;OAIG;IACH,IAAI,aAAa,IAAI,aAAa,EAAE,CAInC;IAED;;;;;;;;;OASG;IACH,OAAO,CAAC,UAAU,CAGF;IAChB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE;IAgB1C,OAAO,CAAC,QAAQ;IAOhB,cAAc,CAAC,CAAC,EAAE,SAAS;IAO3B,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM;IAM3C,eAAe,CAAC,CAAC,EAAE,SAAS;IAS5B,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAKtC,SAAS,mDAAuB;IAEhC,WAAW;IAMX,iBAAiB,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM;IAM3E,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ;IACpC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAgB;IACxC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAErC,UAAU,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO;yCArK3B,qBAAqB;2CAArB,qBAAqB;CAyKjC"}
@@ -1,10 +1,13 @@
1
- import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ElementRef } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { startOfDay, addDays, isSameDay, now, segmentInRange, layoutAllDay, maxLanes, getRecurrenceInstanceMetadata, } from '@bimetal/calendar-core';
4
- import { DEFAULT_RESOURCE_LABEL_WIDTH, createClickIntent } from '@bimetal/calendar-headless';
3
+ import { startOfDay, addDays, isSameDay, now } from '@bimetal/temporal';
4
+ import { segmentInRange, layoutAllDay, maxLanes, getRecurrenceInstanceMetadata } from '@bimetal/calendar-core';
5
+ import { colFromTimeGridX, DEFAULT_RESOURCE_LABEL_WIDTH, createClickIntent } from '@bimetal/calendar-headless';
6
+ import { CalendarPointerGestureService } from '../../binding/index.js';
5
7
  import { EventBarComponent } from '../../components/EventBar.js';
6
8
  import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common";
9
+ import * as i1 from "../../binding/index.js";
10
+ import * as i2 from "@angular/common";
8
11
  function TimelineViewComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
9
12
  i0.ɵɵelementContainerStart(0);
10
13
  i0.ɵɵelementStart(1, "div", 2);
@@ -41,9 +44,11 @@ function TimelineViewComponent_ng_template_1_div_5_button_6_Template(rf, ctx) {
41
44
  } if (rf & 2) {
42
45
  const d_r6 = ctx.$implicit;
43
46
  const i_r7 = ctx.index;
44
- const ctx_r0 = i0.ɵɵnextContext(3);
47
+ const r_r4 = i0.ɵɵnextContext().$implicit;
48
+ const ctx_r0 = i0.ɵɵnextContext(2);
45
49
  i0.ɵɵclassMap("bm-cal-timeline__cell" + (ctx_r0.isToday(d_r6) ? " bm-cal-timeline__cell--today" : ""));
46
50
  i0.ɵɵstyleProp("grid-column", i_r7 + 1)("grid-row", "1 / -1");
51
+ i0.ɵɵattribute("aria-label", r_r4.name + ", " + ctx_r0.formatDate(d_r6));
47
52
  } }
48
53
  function TimelineViewComponent_ng_template_1_div_5_cal_event_bar_7_Template(rf, ctx) { if (rf & 1) {
49
54
  const _r8 = i0.ɵɵgetCurrentView();
@@ -53,7 +58,7 @@ function TimelineViewComponent_ng_template_1_div_5_cal_event_bar_7_Template(rf,
53
58
  } if (rf & 2) {
54
59
  const item_r9 = ctx.$implicit;
55
60
  const ctx_r0 = i0.ɵɵnextContext(3);
56
- i0.ɵɵproperty("event", item_r9.segment.event)("isStart", item_r9.segment.isStart)("isEnd", item_r9.segment.isEnd)("dayIndex", item_r9.dayIndex)("daySpan", item_r9.daySpan)("column", item_r9.column)("weekDates", ctx_r0.dates)("ghost", (ctx_r0.previewEvent == null ? null : ctx_r0.previewEvent.id) === item_r9.segment.event.id)("clickThresholdMs", ctx_r0.config.clickThresholdMs)("isSelected", ctx_r0.isSelected(item_r9.segment.event));
61
+ i0.ɵɵproperty("config", ctx_r0.config)("event", item_r9.segment.event)("isStart", item_r9.segment.isStart)("isEnd", item_r9.segment.isEnd)("dayIndex", item_r9.dayIndex)("daySpan", item_r9.daySpan)("column", item_r9.column)("weekDates", ctx_r0.dates)("ghost", (ctx_r0.previewEvent == null ? null : ctx_r0.previewEvent.id) === item_r9.segment.event.id)("clickThresholdMs", ctx_r0.config.clickThresholdMs)("isSelected", ctx_r0.isSelected(item_r9.segment.event));
57
62
  } }
58
63
  function TimelineViewComponent_ng_template_1_div_5_Template(rf, ctx) { if (rf & 1) {
59
64
  const _r3 = i0.ɵɵgetCurrentView();
@@ -64,7 +69,7 @@ function TimelineViewComponent_ng_template_1_div_5_Template(rf, ctx) { if (rf &
64
69
  i0.ɵɵelementEnd()();
65
70
  i0.ɵɵelementStart(5, "div", 13);
66
71
  i0.ɵɵlistener("dragover", function TimelineViewComponent_ng_template_1_div_5_Template_div_dragover_5_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onLaneDragOver($event)); })("drop", function TimelineViewComponent_ng_template_1_div_5_Template_div_drop_5_listener($event) { const r_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onLaneDrop($event, r_r4.id)); })("dragleave", function TimelineViewComponent_ng_template_1_div_5_Template_div_dragleave_5_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onLaneDragLeave($event)); });
67
- i0.ɵɵtemplate(6, TimelineViewComponent_ng_template_1_div_5_button_6_Template, 1, 6, "button", 14)(7, TimelineViewComponent_ng_template_1_div_5_cal_event_bar_7_Template, 1, 10, "cal-event-bar", 15);
72
+ i0.ɵɵtemplate(6, TimelineViewComponent_ng_template_1_div_5_button_6_Template, 1, 7, "button", 14)(7, TimelineViewComponent_ng_template_1_div_5_cal_event_bar_7_Template, 1, 11, "cal-event-bar", 15);
68
73
  i0.ɵɵelementEnd()();
69
74
  } if (rf & 2) {
70
75
  const r_r4 = ctx.$implicit;
@@ -99,7 +104,40 @@ function TimelineViewComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
99
104
  i0.ɵɵadvance(2);
100
105
  i0.ɵɵproperty("ngForOf", ctx_r0.visibleResources)("ngForTrackBy", ctx_r0.trackResource);
101
106
  } }
107
+ /**
108
+ * Multi-day, multi-resource Gantt-style timeline: one lane per resource, with
109
+ * all-day-style event bars spanning `days` date columns.
110
+ */
102
111
  export class TimelineViewComponent {
112
+ gesture;
113
+ host;
114
+ constructor(gesture, host) {
115
+ this.gesture = gesture;
116
+ this.host = host;
117
+ }
118
+ ngAfterViewInit() {
119
+ // mcp-57 Slice E: shared FSM over the lanes — hit = lane resource + day column.
120
+ this.gesture.init({
121
+ hitTest: (x, y) => {
122
+ const lanes = this.host.nativeElement.querySelectorAll('.bm-cal-timeline__lane-content');
123
+ for (let i = 0; i < lanes.length; i++) {
124
+ const rect = lanes[i].getBoundingClientRect();
125
+ if (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom) {
126
+ const r = this.visibleResources[i];
127
+ if (!r)
128
+ return null;
129
+ return { resourceId: r.id, date: this.dayFromX(x, rect) };
130
+ }
131
+ }
132
+ return null;
133
+ },
134
+ onGestureStart: (info) => this.dragStartEv.emit(info),
135
+ onGestureOver: (hit) => this.dragOverDate.emit(hit.date),
136
+ onGestureLeave: () => this.hidePreviewEv.emit(),
137
+ onGestureDrop: (info, hit) => this.timelineDropInfo.emit({ info, date: hit.date, resourceId: hit.resourceId }),
138
+ onGestureEnd: () => this.dragEnd.emit(),
139
+ });
140
+ }
103
141
  currentDate;
104
142
  days = 7;
105
143
  events = [];
@@ -120,6 +158,8 @@ export class TimelineViewComponent {
120
158
  /** Native `dragend` der Source — Drag-Session vollständig beendet. */
121
159
  dragEnd = new EventEmitter();
122
160
  dragStartEv = new EventEmitter();
161
+ /** Pointer-gesture drop (mcp-57): same controller path, minus the DataTransfer. */
162
+ timelineDropInfo = new EventEmitter();
123
163
  resourceLabelW = DEFAULT_RESOURCE_LABEL_WIDTH;
124
164
  get dates() {
125
165
  const start = startOfDay(this.currentDate);
@@ -149,17 +189,38 @@ export class TimelineViewComponent {
149
189
  return this.events;
150
190
  return this.events.map(ev => ev.id === pe.id ? { ...ev, timeRange: pe.timeRange } : ev);
151
191
  }
192
+ /**
193
+ * CACHED PER INPUT IDENTITY (mcp-130 R1). As a bare method call in the template
194
+ * this ran filter+segment+layout for EVERY lane on EVERY change-detection pass
195
+ * — including the dragstart's own — and minted fresh LayoutItem wrappers each
196
+ * time. `trackBy: trackItem` kept the dragged node alive, but that left the
197
+ * timeline hanging on ONE protective layer where mcp-129/130 deliberately keep
198
+ * two: the very lesson of that ticket ("one fenced source per class is not
199
+ * enough") applied to its defenses too. `laneHeight` calls this as well, so the
200
+ * cache also halves the per-CD layout work.
201
+ */
202
+ itemsCache = null;
152
203
  itemsFor(resourceId) {
204
+ // Keyed on currentDate+days, NOT on `this.dates`: that getter mints a fresh
205
+ // array per call (same class, one level down), which would defeat this cache.
206
+ const key = [this.events, this.previewEvent, this.currentDate, this.days];
207
+ if (!this.itemsCache || !this.itemsCache.key.every((k, i) => k === key[i])) {
208
+ this.itemsCache = { key, byResource: new Map() };
209
+ }
210
+ const cached = this.itemsCache.byResource.get(resourceId);
211
+ if (cached)
212
+ return cached;
153
213
  const own = this.displayEvents.filter(e => e.resourceId === resourceId);
154
214
  const segments = segmentInRange(own, this.dates);
155
- return layoutAllDay(segments, this.dates);
215
+ const items = layoutAllDay(segments, this.dates);
216
+ this.itemsCache.byResource.set(resourceId, items);
217
+ return items;
156
218
  }
157
219
  dayFromX(clientX, laneRect) {
220
+ // mcp-91 R1 (review F2): shared, core-pinned mapping (gutterless row).
221
+ const rtl = getComputedStyle(this.host.nativeElement).direction === 'rtl';
158
222
  const ds = this.dates;
159
- const x = Math.max(0, clientX - laneRect.left);
160
- const colWidth = laneRect.width / ds.length;
161
- const idx = Math.min(ds.length - 1, Math.floor(x / colWidth));
162
- return ds[idx];
223
+ return ds[colFromTimeGridX(clientX, laneRect, 0, ds.length, rtl)];
163
224
  }
164
225
  onLaneDragOver(e) {
165
226
  e.preventDefault();
@@ -207,18 +268,19 @@ export class TimelineViewComponent {
207
268
  return this.selectedEventId === ev.id
208
269
  && this.selectedInstanceDate === (getRecurrenceInstanceMetadata(ev)?.instanceDate);
209
270
  }
210
- static ɵfac = function TimelineViewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TimelineViewComponent)(); };
211
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TimelineViewComponent, selectors: [["cal-timeline-view"]], inputs: { currentDate: "currentDate", days: "days", events: "events", visibleResources: "visibleResources", config: "config", previewEvent: "previewEvent", selectedEventId: "selectedEventId", selectedInstanceDate: "selectedInstanceDate" }, outputs: { eventClick: "eventClick", selectEvent: "selectEvent", clearSelection: "clearSelection", timelineCellClick: "timelineCellClick", timelineDrop: "timelineDrop", dragOverDate: "dragOverDate", hidePreviewEv: "hidePreviewEv", dragEnd: "dragEnd", dragStartEv: "dragStartEv" }, decls: 3, vars: 2, consts: [["withResources", ""], [4, "ngIf", "ngIfElse"], [1, "bm-cal-timeline", "bm-cal-timeline--empty"], [1, "bm-cal-timeline"], [1, "bm-cal-timeline__header"], [1, "bm-cal-timeline__corner"], [3, "class", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "bm-cal-timeline__body"], ["class", "bm-cal-timeline__lane", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "bm-cal-timeline__lane"], [1, "bm-cal-timeline__resource-label"], ["class", "bm-cal-timeline__resource-dot", 3, "background-color", 4, "ngIf"], [1, "bm-cal-timeline__resource-name"], [1, "bm-cal-timeline__lane-content", 3, "dragover", "drop", "dragleave"], ["type", "button", 3, "class", "grid-column", "grid-row", "mousedown", "click", "dblclick", 4, "ngFor", "ngForOf", "ngForTrackBy"], [3, "event", "isStart", "isEnd", "dayIndex", "daySpan", "column", "weekDates", "ghost", "clickThresholdMs", "isSelected", "eventClick", "selectEvent", "dragStart", "dragEnd", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "bm-cal-timeline__resource-dot"], ["type", "button", 3, "mousedown", "click", "dblclick"], [3, "eventClick", "selectEvent", "dragStart", "dragEnd", "event", "isStart", "isEnd", "dayIndex", "daySpan", "column", "weekDates", "ghost", "clickThresholdMs", "isSelected"]], template: function TimelineViewComponent_Template(rf, ctx) { if (rf & 1) {
271
+ static ɵfac = function TimelineViewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TimelineViewComponent)(i0.ɵɵdirectiveInject(i1.CalendarPointerGestureService), i0.ɵɵdirectiveInject(i0.ElementRef)); };
272
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TimelineViewComponent, selectors: [["cal-timeline-view"]], inputs: { currentDate: "currentDate", days: "days", events: "events", visibleResources: "visibleResources", config: "config", previewEvent: "previewEvent", selectedEventId: "selectedEventId", selectedInstanceDate: "selectedInstanceDate" }, outputs: { eventClick: "eventClick", selectEvent: "selectEvent", clearSelection: "clearSelection", timelineCellClick: "timelineCellClick", timelineDrop: "timelineDrop", dragOverDate: "dragOverDate", hidePreviewEv: "hidePreviewEv", dragEnd: "dragEnd", dragStartEv: "dragStartEv", timelineDropInfo: "timelineDropInfo" }, features: [i0.ɵɵProvidersFeature([CalendarPointerGestureService])], decls: 3, vars: 2, consts: [["withResources", ""], [4, "ngIf", "ngIfElse"], [1, "bm-cal-timeline", "bm-cal-timeline--empty"], [1, "bm-cal-timeline"], [1, "bm-cal-timeline__header"], [1, "bm-cal-timeline__corner"], [3, "class", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "bm-cal-timeline__body"], ["class", "bm-cal-timeline__lane", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "bm-cal-timeline__lane"], [1, "bm-cal-timeline__resource-label"], ["class", "bm-cal-timeline__resource-dot", 3, "background-color", 4, "ngIf"], [1, "bm-cal-timeline__resource-name"], [1, "bm-cal-timeline__lane-content", 3, "dragover", "drop", "dragleave"], ["type", "button", 3, "class", "grid-column", "grid-row", "mousedown", "click", "dblclick", 4, "ngFor", "ngForOf", "ngForTrackBy"], [3, "config", "event", "isStart", "isEnd", "dayIndex", "daySpan", "column", "weekDates", "ghost", "clickThresholdMs", "isSelected", "eventClick", "selectEvent", "dragStart", "dragEnd", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "bm-cal-timeline__resource-dot"], ["type", "button", 3, "mousedown", "click", "dblclick"], [3, "eventClick", "selectEvent", "dragStart", "dragEnd", "config", "event", "isStart", "isEnd", "dayIndex", "daySpan", "column", "weekDates", "ghost", "clickThresholdMs", "isSelected"]], template: function TimelineViewComponent_Template(rf, ctx) { if (rf & 1) {
212
273
  i0.ɵɵtemplate(0, TimelineViewComponent_ng_container_0_Template, 3, 1, "ng-container", 1)(1, TimelineViewComponent_ng_template_1_Template, 6, 6, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
213
274
  } if (rf & 2) {
214
275
  const withResources_r10 = i0.ɵɵreference(2);
215
276
  i0.ɵɵproperty("ngIf", ctx.visibleResources.length === 0)("ngIfElse", withResources_r10);
216
- } }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, EventBarComponent], encapsulation: 2, changeDetection: 0 });
277
+ } }, dependencies: [CommonModule, i2.NgForOf, i2.NgIf, EventBarComponent], encapsulation: 2, changeDetection: 0 });
217
278
  }
218
279
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TimelineViewComponent, [{
219
280
  type: Component,
220
281
  args: [{
221
282
  selector: 'cal-timeline-view',
283
+ providers: [CalendarPointerGestureService],
222
284
  standalone: true,
223
285
  imports: [CommonModule, EventBarComponent],
224
286
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -255,6 +317,7 @@ export class TimelineViewComponent {
255
317
  <button *ngFor="let d of dates; let i = index; trackBy: trackDate"
256
318
  type="button"
257
319
  [class]="'bm-cal-timeline__cell' + (isToday(d) ? ' bm-cal-timeline__cell--today' : '')"
320
+ [attr.aria-label]="r.name + ', ' + formatDate(d)"
258
321
  [style.grid-column]="i + 1"
259
322
  [style.grid-row]="'1 / -1'"
260
323
  (mousedown)="cellClick.markMouseDown()"
@@ -262,6 +325,7 @@ export class TimelineViewComponent {
262
325
  (dblclick)="onCellDoubleClick($event, d, r.id)">
263
326
  </button>
264
327
  <cal-event-bar *ngFor="let item of itemsFor(r.id); let idx = index; trackBy: trackItem"
328
+ [config]="config"
265
329
  [event]="item.segment.event"
266
330
  [isStart]="item.segment.isStart"
267
331
  [isEnd]="item.segment.isEnd"
@@ -284,7 +348,7 @@ export class TimelineViewComponent {
284
348
  </ng-template>
285
349
  `,
286
350
  }]
287
- }], null, { currentDate: [{
351
+ }], () => [{ type: i1.CalendarPointerGestureService }, { type: i0.ElementRef }], { currentDate: [{
288
352
  type: Input
289
353
  }], days: [{
290
354
  type: Input
@@ -318,6 +382,8 @@ export class TimelineViewComponent {
318
382
  type: Output
319
383
  }], dragStartEv: [{
320
384
  type: Output
385
+ }], timelineDropInfo: [{
386
+ type: Output
321
387
  }] }); })();
322
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TimelineViewComponent, { className: "TimelineViewComponent", filePath: "views/timeline/timelineview.ts", lineNumber: 81 }); })();
388
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TimelineViewComponent, { className: "TimelineViewComponent", filePath: "views/timeline/timelineview.ts", lineNumber: 87 }); })();
323
389
  //# sourceMappingURL=TimelineView.js.map