@bimetal/calendar-angular-components 0.35.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 (74) hide show
  1. package/dist/binding/controller.d.ts +10 -1
  2. package/dist/binding/controller.d.ts.map +1 -1
  3. package/dist/binding/controller.js +11 -1
  4. package/dist/binding/controller.js.map +1 -1
  5. package/dist/binding/index.d.ts +4 -2
  6. package/dist/binding/index.d.ts.map +1 -1
  7. package/dist/binding/index.js +5 -2
  8. package/dist/binding/index.js.map +1 -1
  9. package/dist/binding/services/pointer-gesture.service.d.ts +26 -0
  10. package/dist/binding/services/pointer-gesture.service.d.ts.map +1 -0
  11. package/dist/binding/services/pointer-gesture.service.js +37 -0
  12. package/dist/binding/services/pointer-gesture.service.js.map +1 -0
  13. package/dist/components/Calendar.d.ts +21 -4
  14. package/dist/components/Calendar.d.ts.map +1 -1
  15. package/dist/components/Calendar.js +121 -30
  16. package/dist/components/Calendar.js.map +1 -1
  17. package/dist/components/CalendarHeader.d.ts +3 -0
  18. package/dist/components/CalendarHeader.d.ts.map +1 -1
  19. package/dist/components/CalendarHeader.js +10 -4
  20. package/dist/components/CalendarHeader.js.map +1 -1
  21. package/dist/components/CategoryFilter.d.ts +3 -0
  22. package/dist/components/CategoryFilter.d.ts.map +1 -1
  23. package/dist/components/CategoryFilter.js +9 -5
  24. package/dist/components/CategoryFilter.js.map +1 -1
  25. package/dist/components/EventBar.d.ts +11 -4
  26. package/dist/components/EventBar.d.ts.map +1 -1
  27. package/dist/components/EventBar.js +87 -32
  28. package/dist/components/EventBar.js.map +1 -1
  29. package/dist/components/EventDialog.d.ts +6 -4
  30. package/dist/components/EventDialog.d.ts.map +1 -1
  31. package/dist/components/EventDialog.js +81 -44
  32. package/dist/components/EventDialog.js.map +1 -1
  33. package/dist/components/EventHistory.d.ts +14 -10
  34. package/dist/components/EventHistory.d.ts.map +1 -1
  35. package/dist/components/EventHistory.js +59 -56
  36. package/dist/components/EventHistory.js.map +1 -1
  37. package/dist/styles/index.css.d.ts +3 -0
  38. package/dist/views/day/DayView.d.ts +26 -4
  39. package/dist/views/day/DayView.d.ts.map +1 -1
  40. package/dist/views/day/DayView.js +56 -17
  41. package/dist/views/day/DayView.js.map +1 -1
  42. package/dist/views/month/MonthView.d.ts +14 -3
  43. package/dist/views/month/MonthView.d.ts.map +1 -1
  44. package/dist/views/month/MonthView.js +55 -7
  45. package/dist/views/month/MonthView.js.map +1 -1
  46. package/dist/views/month/WeekRow.d.ts +19 -3
  47. package/dist/views/month/WeekRow.d.ts.map +1 -1
  48. package/dist/views/month/WeekRow.js +73 -34
  49. package/dist/views/month/WeekRow.js.map +1 -1
  50. package/dist/views/resource/ResourceView.d.ts +28 -1
  51. package/dist/views/resource/ResourceView.d.ts.map +1 -1
  52. package/dist/views/resource/ResourceView.js +78 -21
  53. package/dist/views/resource/ResourceView.js.map +1 -1
  54. package/dist/views/timeline/TimelineView.d.ts +25 -3
  55. package/dist/views/timeline/TimelineView.d.ts.map +1 -1
  56. package/dist/views/timeline/TimelineView.js +77 -16
  57. package/dist/views/timeline/TimelineView.js.map +1 -1
  58. package/dist/views/week/AllDayRow.d.ts +16 -3
  59. package/dist/views/week/AllDayRow.d.ts.map +1 -1
  60. package/dist/views/week/AllDayRow.js +47 -10
  61. package/dist/views/week/AllDayRow.js.map +1 -1
  62. package/dist/views/week/TimeEvent.d.ts +11 -4
  63. package/dist/views/week/TimeEvent.d.ts.map +1 -1
  64. package/dist/views/week/TimeEvent.js +76 -26
  65. package/dist/views/week/TimeEvent.js.map +1 -1
  66. package/dist/views/week/WeekView.d.ts +16 -1
  67. package/dist/views/week/WeekView.d.ts.map +1 -1
  68. package/dist/views/week/WeekView.js +53 -18
  69. package/dist/views/week/WeekView.js.map +1 -1
  70. package/dist/views/year/YearView.d.ts +2 -0
  71. package/dist/views/year/YearView.d.ts.map +1 -1
  72. package/dist/views/year/YearView.js +17 -1
  73. package/dist/views/year/YearView.js.map +1 -1
  74. package/package.json +15 -12
@@ -2,11 +2,13 @@ import { Component, Input, Output, EventEmitter, ViewChild, ElementRef } from '@
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { isSameDay, now, startOfDay, addDays, getHours, getMinutes, createTimeRange, overlaps, formatDateTime } from '@bimetal/temporal';
4
4
  import { segmentTimed, layoutTimed, getRecurrenceInstanceMetadata } from '@bimetal/calendar-core';
5
- import { snapTimeFromMouseY } from '../../binding/index.js';
5
+ import { colFromTimeGridX } from '@bimetal/calendar-headless';
6
+ import { snapTimeFromMouseY, CalendarPointerGestureService } from '../../binding/index.js';
6
7
  import { DEFAULT_HOUR_HEIGHT, DEFAULT_TIME_LABEL_WIDTH_DAY, DEFAULT_SCROLL_HOUR, createClickIntent } from '@bimetal/calendar-headless';
7
8
  import { TimeEventComponent } from '../week/TimeEvent.js';
8
9
  import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common";
10
+ import * as i1 from "../../binding/index.js";
11
+ import * as i2 from "@angular/common";
10
12
  const _c0 = ["timeGridEl"];
11
13
  const _c1 = ["gridInnerEl"];
12
14
  function ResourceViewComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
@@ -59,7 +61,7 @@ function ResourceViewComponent_ng_template_1_div_12_Template(rf, ctx) { if (rf &
59
61
  } if (rf & 2) {
60
62
  const i_r7 = ctx.index;
61
63
  const ctx_r0 = i0.ɵɵnextContext(2);
62
- 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);
63
65
  } }
64
66
  function ResourceViewComponent_ng_template_1_cal_time_event_13_Template(rf, ctx) { if (rf & 1) {
65
67
  const _r8 = i0.ɵɵgetCurrentView();
@@ -69,7 +71,7 @@ function ResourceViewComponent_ng_template_1_cal_time_event_13_Template(rf, ctx)
69
71
  } if (rf & 2) {
70
72
  const entry_r9 = ctx.$implicit;
71
73
  const ctx_r0 = i0.ɵɵnextContext(2);
72
- 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));
73
75
  } }
74
76
  function ResourceViewComponent_ng_template_1_div_14_Template(rf, ctx) { if (rf & 1) {
75
77
  i0.ɵɵelementStart(0, "div", 24);
@@ -77,7 +79,7 @@ function ResourceViewComponent_ng_template_1_div_14_Template(rf, ctx) { if (rf &
77
79
  i0.ɵɵelementEnd();
78
80
  } if (rf & 2) {
79
81
  const ctx_r0 = i0.ɵɵnextContext(2);
80
- 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");
81
83
  } }
82
84
  function ResourceViewComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
83
85
  const _r2 = i0.ɵɵgetCurrentView();
@@ -90,7 +92,7 @@ function ResourceViewComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
90
92
  i0.ɵɵelementEnd()();
91
93
  i0.ɵɵelementStart(7, "div", 11, 1)(9, "div", 12, 2);
92
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)); });
93
- 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);
94
96
  i0.ɵɵelementEnd()()();
95
97
  } if (rf & 2) {
96
98
  const ctx_r0 = i0.ɵɵnextContext();
@@ -107,7 +109,7 @@ function ResourceViewComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
107
109
  i0.ɵɵadvance();
108
110
  i0.ɵɵproperty("ngForOf", ctx_r0.visibleResources)("ngForTrackBy", ctx_r0.trackResource);
109
111
  i0.ɵɵadvance();
110
- i0.ɵɵproperty("ngForOf", ctx_r0.timedEntries);
112
+ i0.ɵɵproperty("ngForOf", ctx_r0.timedEntries)("ngForTrackBy", ctx_r0.trackTimed);
111
113
  i0.ɵɵadvance();
112
114
  i0.ɵɵproperty("ngIf", ctx_r0.isToday);
113
115
  } }
@@ -117,6 +119,10 @@ const HOURS = Array.from({ length: 24 }, (_, i) => i);
117
119
  * with its own overlap-lane layout of timed events.
118
120
  */
119
121
  export class ResourceViewComponent {
122
+ gesture;
123
+ constructor(gesture) {
124
+ this.gesture = gesture;
125
+ }
120
126
  currentDate;
121
127
  events = [];
122
128
  visibleResources = [];
@@ -135,6 +141,7 @@ export class ResourceViewComponent {
135
141
  hidePreviewEv = new EventEmitter();
136
142
  /** Native `dragend` der Source — Drag-Session vollständig beendet. */
137
143
  dragEnd = new EventEmitter();
144
+ resourceDropInfo = new EventEmitter();
138
145
  dragStartEv = new EventEmitter();
139
146
  timeGridEl;
140
147
  gridInnerEl;
@@ -143,6 +150,26 @@ export class ResourceViewComponent {
143
150
  timeLabelWidth = DEFAULT_TIME_LABEL_WIDTH_DAY;
144
151
  click = createClickIntent();
145
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
+ });
146
173
  if (this.timeGridEl?.nativeElement) {
147
174
  this.timeGridEl.nativeElement.scrollTop = DEFAULT_SCROLL_HOUR * DEFAULT_HOUR_HEIGHT;
148
175
  }
@@ -172,7 +199,31 @@ export class ResourceViewComponent {
172
199
  * dayCol = Resource-Index, lane/laneCount aus layoutTimed pro Resource
173
200
  * — Überlapper in r1 dürfen die Spalte r2 nicht halbieren.
174
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;
175
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() {
176
227
  const dayStart = startOfDay(this.currentDate);
177
228
  const dayEnd = addDays(dayStart, 1);
178
229
  const dayRange = createTimeRange(dayStart, dayEnd);
@@ -202,12 +253,14 @@ export class ResourceViewComponent {
202
253
  if (this.visibleResources.length === 0)
203
254
  return null;
204
255
  const rect = gridInner.getBoundingClientRect();
205
- const x = clientX - rect.left - this.timeLabelWidth;
206
- 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)
207
262
  return null;
208
- const cw = (rect.width - this.timeLabelWidth) / this.visibleResources.length;
209
- const idx = Math.min(this.visibleResources.length - 1, Math.max(0, Math.floor(x / cw)));
210
- return this.visibleResources[idx].id;
263
+ return this.visibleResources[colFromTimeGridX(clientX, rect, this.timeLabelWidth, this.visibleResources.length, rtl)].id;
211
264
  }
212
265
  isOffHour(h) {
213
266
  const wh = this.config.core.workingHours;
@@ -268,7 +321,7 @@ export class ResourceViewComponent {
268
321
  }
269
322
  trackResource(_, r) { return r.id; }
270
323
  trackEvent(_, ev) { return ev.id; }
271
- 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)); };
272
325
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ResourceViewComponent, selectors: [["cal-resource-view"]], viewQuery: function ResourceViewComponent_Query(rf, ctx) { if (rf & 1) {
273
326
  i0.ɵɵviewQuery(_c0, 5);
274
327
  i0.ɵɵviewQuery(_c1, 5);
@@ -276,17 +329,18 @@ export class ResourceViewComponent {
276
329
  let _t;
277
330
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.timeGridEl = _t.first);
278
331
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.gridInnerEl = _t.first);
279
- } }, 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) {
280
- 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);
281
334
  } if (rf & 2) {
282
335
  const withResources_r10 = i0.ɵɵreference(2);
283
336
  i0.ɵɵproperty("ngIf", ctx.visibleResources.length === 0)("ngIfElse", withResources_r10);
284
- } }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, TimeEventComponent], encapsulation: 2 });
337
+ } }, dependencies: [CommonModule, i2.NgForOf, i2.NgIf, TimeEventComponent], encapsulation: 2 });
285
338
  }
286
339
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceViewComponent, [{
287
340
  type: Component,
288
341
  args: [{
289
342
  selector: 'cal-resource-view',
343
+ providers: [CalendarPointerGestureService],
290
344
  standalone: true,
291
345
  host: { style: 'display: contents' },
292
346
  imports: [CommonModule, TimeEventComponent],
@@ -324,14 +378,15 @@ export class ResourceViewComponent {
324
378
  <!-- Click-target columns; drag handlers live on the grid-inner above -->
325
379
  <div *ngFor="let r of visibleResources; let i = index; trackBy: trackResource"
326
380
  class="bm-cal-resource__resource-col"
327
- [style.left]="colLeft(i)"
381
+ [style.inset-inline-start]="colLeft(i)"
328
382
  [style.width]="colWidth"
329
383
  (mousedown)="click.markMouseDown()"
330
384
  (click)="onColClick($event)"
331
385
  (dblclick)="onColDoubleClick($event, r.id)">
332
386
  </div>
333
387
  <!-- Events as siblings: TimeEvent positions relative to the full grid -->
334
- <cal-time-event *ngFor="let entry of timedEntries"
388
+ <cal-time-event *ngFor="let entry of timedEntries; trackBy: trackTimed"
389
+ [config]="config"
335
390
  [event]="entry.event"
336
391
  [dayCol]="entry.layout.dayCol" [dayCount]="entry.layout.dayCount"
337
392
  [lane]="entry.layout.lane" [laneCount]="entry.layout.laneCount"
@@ -349,7 +404,7 @@ export class ResourceViewComponent {
349
404
  </cal-time-event>
350
405
 
351
406
  <div *ngIf="isToday" class="bm-cal-resource__now-line"
352
- [style.top.px]="nowHours * hourHeight" [style.left.px]="timeLabelWidth">
407
+ [style.top.px]="nowHours * hourHeight" [style.inset-inline-start.px]="timeLabelWidth">
353
408
  <div class="bm-cal-resource__now-dot"></div>
354
409
  </div>
355
410
  </div>
@@ -358,7 +413,7 @@ export class ResourceViewComponent {
358
413
  </ng-template>
359
414
  `,
360
415
  }]
361
- }], null, { currentDate: [{
416
+ }], () => [{ type: i1.CalendarPointerGestureService }], { currentDate: [{
362
417
  type: Input
363
418
  }], events: [{
364
419
  type: Input
@@ -388,6 +443,8 @@ export class ResourceViewComponent {
388
443
  type: Output
389
444
  }], dragEnd: [{
390
445
  type: Output
446
+ }], resourceDropInfo: [{
447
+ type: Output
391
448
  }], dragStartEv: [{
392
449
  type: Output
393
450
  }], timeGridEl: [{
@@ -397,5 +454,5 @@ export class ResourceViewComponent {
397
454
  type: ViewChild,
398
455
  args: ['gridInnerEl']
399
456
  }] }); })();
400
- (() => { (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 }); })();
401
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,13 +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
7
  /**
7
8
  * Multi-day, multi-resource Gantt-style timeline: one lane per resource, with
8
9
  * all-day-style event bars spanning `days` date columns.
9
10
  */
10
- export declare class TimelineViewComponent {
11
+ export declare class TimelineViewComponent implements AfterViewInit {
12
+ private gesture;
13
+ private host;
14
+ constructor(gesture: CalendarPointerGestureService, host: ElementRef<HTMLElement>);
15
+ ngAfterViewInit(): void;
11
16
  currentDate: CalendarDateTime;
12
17
  days: number;
13
18
  events: CalendarEvent[];
@@ -42,6 +47,12 @@ export declare class TimelineViewComponent {
42
47
  /** Native `dragend` der Source — Drag-Session vollständig beendet. */
43
48
  dragEnd: EventEmitter<void>;
44
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
+ }>;
45
56
  resourceLabelW: number;
46
57
  get dates(): CalendarDateTime[];
47
58
  get colTemplate(): string;
@@ -55,6 +66,17 @@ export declare class TimelineViewComponent {
55
66
  * event in by id — the timeline no longer reconstructs anything.
56
67
  */
57
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;
58
80
  itemsFor(resourceId: string): LayoutItem[];
59
81
  private dayFromX;
60
82
  onLaneDragOver(e: DragEvent): void;
@@ -69,6 +91,6 @@ export declare class TimelineViewComponent {
69
91
  trackItem(_: number, item: LayoutItem): string;
70
92
  isSelected(ev: CalendarEvent): boolean;
71
93
  static ɵfac: i0.ɵɵFactoryDeclaration<TimelineViewComponent, never>;
72
- 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>;
73
95
  }
74
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;AAGpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;;AAK3D;;;GAGG;AACH,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,11 +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
3
  import { startOfDay, addDays, isSameDay, now } from '@bimetal/temporal';
4
4
  import { segmentInRange, layoutAllDay, maxLanes, getRecurrenceInstanceMetadata } from '@bimetal/calendar-core';
5
- import { DEFAULT_RESOURCE_LABEL_WIDTH, createClickIntent } from '@bimetal/calendar-headless';
5
+ import { colFromTimeGridX, DEFAULT_RESOURCE_LABEL_WIDTH, createClickIntent } from '@bimetal/calendar-headless';
6
+ import { CalendarPointerGestureService } from '../../binding/index.js';
6
7
  import { EventBarComponent } from '../../components/EventBar.js';
7
8
  import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common";
9
+ import * as i1 from "../../binding/index.js";
10
+ import * as i2 from "@angular/common";
9
11
  function TimelineViewComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
10
12
  i0.ɵɵelementContainerStart(0);
11
13
  i0.ɵɵelementStart(1, "div", 2);
@@ -42,9 +44,11 @@ function TimelineViewComponent_ng_template_1_div_5_button_6_Template(rf, ctx) {
42
44
  } if (rf & 2) {
43
45
  const d_r6 = ctx.$implicit;
44
46
  const i_r7 = ctx.index;
45
- const ctx_r0 = i0.ɵɵnextContext(3);
47
+ const r_r4 = i0.ɵɵnextContext().$implicit;
48
+ const ctx_r0 = i0.ɵɵnextContext(2);
46
49
  i0.ɵɵclassMap("bm-cal-timeline__cell" + (ctx_r0.isToday(d_r6) ? " bm-cal-timeline__cell--today" : ""));
47
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));
48
52
  } }
49
53
  function TimelineViewComponent_ng_template_1_div_5_cal_event_bar_7_Template(rf, ctx) { if (rf & 1) {
50
54
  const _r8 = i0.ɵɵgetCurrentView();
@@ -54,7 +58,7 @@ function TimelineViewComponent_ng_template_1_div_5_cal_event_bar_7_Template(rf,
54
58
  } if (rf & 2) {
55
59
  const item_r9 = ctx.$implicit;
56
60
  const ctx_r0 = i0.ɵɵnextContext(3);
57
- 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));
58
62
  } }
59
63
  function TimelineViewComponent_ng_template_1_div_5_Template(rf, ctx) { if (rf & 1) {
60
64
  const _r3 = i0.ɵɵgetCurrentView();
@@ -65,7 +69,7 @@ function TimelineViewComponent_ng_template_1_div_5_Template(rf, ctx) { if (rf &
65
69
  i0.ɵɵelementEnd()();
66
70
  i0.ɵɵelementStart(5, "div", 13);
67
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)); });
68
- 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);
69
73
  i0.ɵɵelementEnd()();
70
74
  } if (rf & 2) {
71
75
  const r_r4 = ctx.$implicit;
@@ -105,6 +109,35 @@ function TimelineViewComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
105
109
  * all-day-style event bars spanning `days` date columns.
106
110
  */
107
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
+ }
108
141
  currentDate;
109
142
  days = 7;
110
143
  events = [];
@@ -125,6 +158,8 @@ export class TimelineViewComponent {
125
158
  /** Native `dragend` der Source — Drag-Session vollständig beendet. */
126
159
  dragEnd = new EventEmitter();
127
160
  dragStartEv = new EventEmitter();
161
+ /** Pointer-gesture drop (mcp-57): same controller path, minus the DataTransfer. */
162
+ timelineDropInfo = new EventEmitter();
128
163
  resourceLabelW = DEFAULT_RESOURCE_LABEL_WIDTH;
129
164
  get dates() {
130
165
  const start = startOfDay(this.currentDate);
@@ -154,17 +189,38 @@ export class TimelineViewComponent {
154
189
  return this.events;
155
190
  return this.events.map(ev => ev.id === pe.id ? { ...ev, timeRange: pe.timeRange } : ev);
156
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;
157
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;
158
213
  const own = this.displayEvents.filter(e => e.resourceId === resourceId);
159
214
  const segments = segmentInRange(own, this.dates);
160
- return layoutAllDay(segments, this.dates);
215
+ const items = layoutAllDay(segments, this.dates);
216
+ this.itemsCache.byResource.set(resourceId, items);
217
+ return items;
161
218
  }
162
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';
163
222
  const ds = this.dates;
164
- const x = Math.max(0, clientX - laneRect.left);
165
- const colWidth = laneRect.width / ds.length;
166
- const idx = Math.min(ds.length - 1, Math.floor(x / colWidth));
167
- return ds[idx];
223
+ return ds[colFromTimeGridX(clientX, laneRect, 0, ds.length, rtl)];
168
224
  }
169
225
  onLaneDragOver(e) {
170
226
  e.preventDefault();
@@ -212,18 +268,19 @@ export class TimelineViewComponent {
212
268
  return this.selectedEventId === ev.id
213
269
  && this.selectedInstanceDate === (getRecurrenceInstanceMetadata(ev)?.instanceDate);
214
270
  }
215
- static ɵfac = function TimelineViewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TimelineViewComponent)(); };
216
- 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) {
217
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);
218
274
  } if (rf & 2) {
219
275
  const withResources_r10 = i0.ɵɵreference(2);
220
276
  i0.ɵɵproperty("ngIf", ctx.visibleResources.length === 0)("ngIfElse", withResources_r10);
221
- } }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, EventBarComponent], encapsulation: 2, changeDetection: 0 });
277
+ } }, dependencies: [CommonModule, i2.NgForOf, i2.NgIf, EventBarComponent], encapsulation: 2, changeDetection: 0 });
222
278
  }
223
279
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TimelineViewComponent, [{
224
280
  type: Component,
225
281
  args: [{
226
282
  selector: 'cal-timeline-view',
283
+ providers: [CalendarPointerGestureService],
227
284
  standalone: true,
228
285
  imports: [CommonModule, EventBarComponent],
229
286
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -260,6 +317,7 @@ export class TimelineViewComponent {
260
317
  <button *ngFor="let d of dates; let i = index; trackBy: trackDate"
261
318
  type="button"
262
319
  [class]="'bm-cal-timeline__cell' + (isToday(d) ? ' bm-cal-timeline__cell--today' : '')"
320
+ [attr.aria-label]="r.name + ', ' + formatDate(d)"
263
321
  [style.grid-column]="i + 1"
264
322
  [style.grid-row]="'1 / -1'"
265
323
  (mousedown)="cellClick.markMouseDown()"
@@ -267,6 +325,7 @@ export class TimelineViewComponent {
267
325
  (dblclick)="onCellDoubleClick($event, d, r.id)">
268
326
  </button>
269
327
  <cal-event-bar *ngFor="let item of itemsFor(r.id); let idx = index; trackBy: trackItem"
328
+ [config]="config"
270
329
  [event]="item.segment.event"
271
330
  [isStart]="item.segment.isStart"
272
331
  [isEnd]="item.segment.isEnd"
@@ -289,7 +348,7 @@ export class TimelineViewComponent {
289
348
  </ng-template>
290
349
  `,
291
350
  }]
292
- }], null, { currentDate: [{
351
+ }], () => [{ type: i1.CalendarPointerGestureService }, { type: i0.ElementRef }], { currentDate: [{
293
352
  type: Input
294
353
  }], days: [{
295
354
  type: Input
@@ -323,6 +382,8 @@ export class TimelineViewComponent {
323
382
  type: Output
324
383
  }], dragStartEv: [{
325
384
  type: Output
385
+ }], timelineDropInfo: [{
386
+ type: Output
326
387
  }] }); })();
327
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TimelineViewComponent, { className: "TimelineViewComponent", filePath: "views/timeline/timelineview.ts", lineNumber: 83 }); })();
388
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TimelineViewComponent, { className: "TimelineViewComponent", filePath: "views/timeline/timelineview.ts", lineNumber: 87 }); })();
328
389
  //# sourceMappingURL=TimelineView.js.map